Instrução MySQL INSERT IGNORE

Resumo : neste tutorial, você aprenderá como usar a INSERT IGNOREinstrução MySQL para inserir dados em uma tabela.

Introdução à instrução INSERT IGNORE do MySQL

Quando você usa a INSERTinstrução para adicionar múltiplas linhas a uma tabela e se ocorrer um erro durante o processamento, o MySQL encerra a instrução e retorna um erro. Consequentemente, a tabela permanece inalterada sem linhas inseridas.

A INSERT IGNOREinstrução permite desconsiderar linhas que contenham dados inválidos que, de outra forma, desencadeariam um erro e inserir apenas linhas que contenham dados válidos.

Aqui está a sintaxe básica da INSERT IGNOREinstrução:

INSERT IGNORE INTO table(column_list)
VALUES(value_list),
      (value_list),
      ...;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Observe que a IGNOREopção é uma extensão do MySQL para o padrão SQL.

Exemplo de INSERT IGNORE do MySQL

Criaremos uma nova tabela chamada subscriberspara demonstração.

CREATE TABLE subscribers (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(130) NOT NULL UNIQUE
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A UNIQUErestrição garante que não exista nenhum email duplicado na emailcoluna.

A instrução a seguir insere uma nova linha na   subscriberstabela:

INSERT INTO subscribers(email)
VALUES('[email protected]');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Funcionou como esperado.

Vamos executar outra instrução que insere duas linhas na   subscriberstabela:

INSERT INTO subscribers(email)
VALUES('[email protected]'), 
      ('[email protected]');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Ele retorna um erro.

Error Code: 1062. Duplicate entry '[email protected]' for key 'email'Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Conforme indicado na mensagem de erro, o email [email protected] viola a UNIQUErestrição.

No entanto, se você usar a INSERT IGNOREinstrução.

INSERT IGNORE INTO subscribers(email)
VALUES('[email protected]'), 
      ('[email protected]');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O MySQL retornou uma mensagem indicando que uma linha foi inserida e a outra linha foi ignorada.

1 row(s) affected, 1 warning(s): 1062 Duplicate entry '[email protected]' for key 'email' Records: 2  Duplicates: 1  Warnings: 1Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para encontrar os detalhes do aviso, você pode usar o SHOW WARNINGScomando mostrado abaixo:

SHOW WARNINGS;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL INSERT IGNORE - aviso

Concluindo, quando você usa a INSERT IGNOREinstrução, em vez de emitir um erro, o MySQL emite um aviso caso ocorra um erro.

Se você consultar os dados da subscriberstabela, descobrirá que apenas uma linha foi inserida e a linha que causou o erro não.

MySQL INSERT IGNORE - tabela de assinantes

MySQL INSERT IGNORE e modo STRICT

Quando o modo estrito está ativado, o MySQL retorna um erro e anula a INSERTinstrução se você tentar inserir valores inválidos em uma tabela.

Entretanto, se você usar a INSERT IGNOREinstrução, o MySQL emitirá um aviso em vez de um erro. Além disso, tentará ajustar os valores para torná-los válidos antes de adicionar o valor à tabela.

Considere o seguinte exemplo.

Primeiro, criamos uma nova tabela chamada tokens:

CREATE TABLE tokens (
    s VARCHAR(6)
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta tabela, a coluna saceita apenas strings cujos comprimentos sejam menores ou iguais a seis.

Segundo, insira uma string cujo comprimento seja sete na tokenstabela.

INSERT INTO tokens VALUES('abcdefg');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O MySQL emitiu o seguinte erro porque o modo estrito está ativado.

Error Code: 1406. Data too long for column 's' at row 1Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, use a INSERT IGNOREinstrução para inserir a mesma string.

INSERT IGNORE INTO tokens VALUES('abcdefg');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

MySQL truncou dados antes de inseri-los na tokenstabela. Além disso, emite um aviso.

MySQL INSERT IGNORE - modo estrito

Resumo

  • Use a INSERT IGNOREinstrução MySQL para inserir linhas em uma tabela e ignorar erros de linhas que causam erros.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *