INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] nome_tabela [(nome_coluna,...)]
        VALUES ((expressão | DEFAULT),...),(...),...
        [ ON DUPLICATE KEY UPDATE nome_coluna=expressão, ... ]
or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] nome_tabela [(nome_coluna,...)]
        SELECT ...
or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] nome_tabela
        SET nome_coluna=(expressão | DEFAULT), ...
        [ ON DUPLICATE KEY UPDATE nome_coluna=expressão, ... ]
        INSERT insere novos registros em uma tabela
        existente. A forma INSERT ... VALUES da
        instrução insere registros baseado em valores especificados
        explicitamente. A forma INSERT ... SELECT
        insere linhas selecionadas de outra(s) tabela(s). A forma
        INSERT ... VALUES com listas de múltiplos
        valores é suportado a partir da versão 3.22.5. A sintaxe
        nome_coluna=expressão é suportada a partir
        da verão 3.22.10 do MySQL.
      
        nome_tabela é a tabela na qual as linhas
        serão inseridas. A lista de nome das colunas ou a cláusula
        SET indica para quais colunas a instrução
        especifica valor:
      
            Se você não especificar a lista de colunas para
            INSERT ... VALUES ou INSERT ...
            SELECT, os valores para todas as colunas na tabela
            devem ser fornecidos na lista VALUES() ou
            pelo SELECT. Se você não souber a ordem
            das colunas nas tabelas, use DESCRIBE
            nome_tabela para descobrir.
          
            
            Qualquer coluna que não tiver o valor fornecido
            explicitamente assumirá o seu valor padrão. Por exemplo,
            se você especificar uma lista de colunas que não definem
            todas as coolunas na tabela, às colunas não definidas
            serão atribuídos o seu valor padrão. Atribuição de
            valor padrão é definido em Secção 6.5.3, “Sintaxe CREATE TABLE”.
          
            Você também pode utilizar a palavra-chave
            DEFAULT para atribuir o valor padrão a
            uma coluna (Novo na versão 4.0.3. do MySQL). Fica mais
            fácil de se escrever instruções INSERT
            que atribuem valor a apenas algumas colunas porque ele
            permite que você evite escrever uma lista
            VALUES() incompleta (uma lista que não
            inclu um valor para cada coluna da tabela). De outa forma,
            você teria que escrever a lista de nomes de colunas
            correspondentes a cada valor na lista
            VALUES().
          
MySQL sempre tem uma valor padrão para todos os campos. Isto é algo imposto pelo MySQL para estar apto a funcionar com tabelas transacionais e não transcaionais.
Nossa visão é que a verificação do conteúdo dos campos deve ser feita pela application and not in the database server.
            Uma expressão pode se referir a qualquer
            coluna que tenha sida definaida anteriormente na lista de
            valores. Por exemplo, você pode dizer:
          
mysql> INSERT INTO nome_tabela (col1,col2) VALUES(15,col1*2);
Mas não:
mysql> INSERT INTO nome_tabela (col1,col2) VALUES(col2*2,15);
            Se você especificar a palavra chave
            DELAYED, o servidor coloca a linha ou
            linhas a serem inseridas em um buffer, e o cliente que envia
            a instrução INSERT DELAYED então pode
            contiuar. Se a tabela está ocupada, o servidor guarda a
            linha. Quando a tabela fica livre, ele começa a inserir
            linhas, verificando periódicamente para ver se há novos
            pedidos de leitura para a tabela. Se houver, a fila de
            linhas atrasadas é suspensa até que a tabela fique livre
            de novo.
          
            Se você especificar a palavra-chave
            LOW_PRIORITY, a execução do
            INSERT é atrasada até que nenhum outro
            cliente esteja lendo a tabela. Isto inclui outros clientes
            que começam a ler enquanto clientes existentes já estão
            lendo e enquanto a instrução INSERT
            LOW_PRIORITY está esperando. É possível,
            consequentemente, para um cliente que envia uma instrução
            INSERT LOW_PRIORITY esperar por um tempo
            muito longo (ou mesmo para sempre) em um ambiente de muita
            leitura. (É diferente de INSERT DELAYED,
            que deixa o cliente continuar de uma vez. See
            Secção 6.4.3.2, “Sintaxe INSERT DELAYED”. Note que
            LOW_PRIORITY não deve normalmente ser
            usado com tabelas MyISAM ja que elas
            disabilitam inserções concorrentes. See
            Secção 7.1, “Tabelas MyISAM”.
          
            Se você especificar a palavra-chave
            IGNORE em um INSERT
            com muitas linhas, quqlquer linha que duplicar uma chave
            PRIMARY ou UNIQUE
            existente em uma tabela são ignorados e não são
            inseridos. Se você não especificar
            IGNORE, a inserção é abortada se
            houver quqlquer linhq que duplique um valor de uma chave
            existente. Você pode determinar com função
            mysql_info() da API C quantas linhas
            foram inseridas nas tabelas.
          
            Se você especificar se uma cláusula ON DUPLICATE
            KEY UPDATE (noca no MySQL 4.1.0), e uma linha que
            causasse a duplicação de um valor fosse inserida em uma
            chave PRIMARY ou
            UNIQUE, um UPDATE da
            linha antiga seria realizado. Por exemplo, o comando:
          
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)->ON DUPLICATE KEY UPDATE c=c+1;
            no caso da coluna a ser declarada como
            UNIQUE e ja existir o valor
            1, o exemplo acima seria idêntico a
          
mysql> UPDATE table SET c=c+1 WHERE a=1;
            Nota: se a coluna
            b também for única, o comando
            UPDATE seria escrito como
          
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
            e se a=1 OR b=2 casasse com diversas
            linhas, somente uma linha
            será atualizada! em geral, deve-se tentar evitar utilizar a
            cláusula ON DUPLICATE KEY em tabelas com
            múltiplas chaves UNIQUE.
          
            Desde o MySQL 4.1.1 pode-se utilizar a função
            VALUES(nome_coluna) para se referir ao
            valor da coluna na parte INSERT do
            comando INSERT ... UPDATE - que é o
            valor que seria inserido se não houvesse conflitos de
            chaves duplicadas. Esta função é especialmente útil em
            inserções de múltiplas linhas. Naturalmente a função
            VALUES() só tem sentido em um comando
            INSERT ... UPDATE e retorna
            NULL no caso de outros comandos.
          
Exemplo:
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
O camondo acima e idêntico a
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)->ON DUPLICATE KEY UPDATE c=3;mysql>INSERT INTO table (a,b,c) VALUES (4,5,6)->ON DUPLICATE KEY UPDATE c=9;
            A utilizar ON DUPLICATE KEY UPDATE, a
            opção DELAYED é ignorada.
          
            Se MySQL foi configurado usando a opção
            DONT_USE_DEFAULT_FIELDS, instruções
            INSERT geram um erro a menos que você
            especifique valores explicitamete para todas as colunas que
            exigem um valor não-NULL. See
            Secção 2.3.3, “Opções típicas do configure”.
          
            Você pode encontrar o valor usado por uma coluna
            AUTO_INCREMENT com a função
            mysql_insert_id. See
            Secção 12.1.3.32, “mysql_insert_id()”.
          
        Se você utilizar instruções INSERT ...
        SELECT ou INSERT ... VALUES com
        lista de valores múltiplos, você pode utilizar a função
        mysql_info() da API C para obter informação
        sobre a consulta. O formato da string de informação é
        mostrado aqui:
      
Records: 100 Duplicates: 0 Warnings: 0
        Duplicates indica o número de linhas que
        não puderam ser inseridas porque duplicariam alguns valores de
        índices únicos existentes. Warnings indica
        o número de tentativas de inserção de um valor em uma coluna
        que de alguma forma estava problematico. Avisos (Warnings) podem
        ocorrer sob qualquer uma das seguintes condições:
      
            Inserir NULL em uma coluna declarada com
            NOT NULL. A coluna é definida com o seu
            valor padrão.
          
Definir uma coluna numérica com um valor que esteja fora da faixa permitida. O valor é revertido para final apropriado da faixa.
            Definir uma coluna numérica com um valor como
            '10.34 a'. O lixo no final é eliminado e
            a parte numérica restante é inserida. Se o valor não
            fizer sentido como um número, é atribuido
            0 a coluna.
          
            Inserir uma string em uma coluna CHAR,
            VARCHAR, TEXT, ou
            BLOB e que exceda o tamanho máximo da
            coluna. O valor é truncado para o tamanho máximo da
            coluna.
          
Inserir um valor em uma coluna date ou time e que seja inválido para o tipo da coluna. A coluna é preenchida com o valor de zero apropriado para o tipo.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

