Resumo : neste tutorial, você aprenderá como usar a INSERT IGNORE
instrução MySQL para inserir dados em uma tabela.
Introdução à instrução INSERT IGNORE do MySQL
Quando você usa a INSERT
instruçã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 IGNORE
instruçã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 IGNORE
instruçã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 IGNORE
opção é uma extensão do MySQL para o padrão SQL.
Exemplo de INSERT IGNORE do MySQL
Criaremos uma nova tabela chamada subscribers
para 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 UNIQUE
restrição garante que não exista nenhum email duplicado na email
coluna.
A instrução a seguir insere uma nova linha na subscribers
tabela:
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 subscribers
tabela:
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 UNIQUE
restrição.
No entanto, se você usar a INSERT IGNORE
instruçã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: 1
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para encontrar os detalhes do aviso, você pode usar o SHOW WARNINGS
comando mostrado abaixo:
SHOW WARNINGS;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Concluindo, quando você usa a INSERT IGNORE
instrução, em vez de emitir um erro, o MySQL emite um aviso caso ocorra um erro.
Se você consultar os dados da subscribers
tabela, descobrirá que apenas uma linha foi inserida e a linha que causou o erro não.
MySQL INSERT IGNORE e modo STRICT
Quando o modo estrito está ativado, o MySQL retorna um erro e anula a INSERT
instrução se você tentar inserir valores inválidos em uma tabela.
Entretanto, se você usar a INSERT IGNORE
instruçã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 s
aceita apenas strings cujos comprimentos sejam menores ou iguais a seis.
Segundo, insira uma string cujo comprimento seja sete na tokens
tabela.
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 1
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, use a INSERT IGNORE
instruçã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 tokens
tabela. Além disso, emite um aviso.
Resumo
- Use a
INSERT IGNORE
instrução MySQL para inserir linhas em uma tabela e ignorar erros de linhas que causam erros.