MySQL INSERT IGNORE 语句
在本教程中,您将学习如何使用 MySQL INSERT IGNORE 语句将数据插入表中。
摘要:在本教程中,您将学习如何使用 MySQL INSERT IGNORE 语句将数据插入表中。
MySQL INSERT IGNORE 语句介绍
当您使用该 INSERT 语句向表中添加多行时,如果在处理过程中发生错误,MySQL 会终止该语句并返回错误。结果,没有行插入到表中。
但是,如果使用该 INSERT IGNORE 语句,则会忽略导致错误的具有无效数据的行,并将具有有效数据的行插入到表中。
INSERT IGNORE 语句的语法如下:
INSERT IGNORE INTO table(column_list)
VALUES( value_list),
( value_list),
...
请注意,该 IGNORE 子句是 MySQL 对 SQL 标准的扩展。
MySQL INSERT IGNORE 实例
CREATE TABLE subscribers (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(50) NOT NULL UNIQUE
);
该 UNIQUE 约束确保列中不存在重复的电子邮件 email 。
以下语句向 subscribers 表中插入一个新行 :
INSERT INTO subscribers(email)
VALUES('[email protected]');
它按预期工作。
让我们执行另一个向表中插入两行的语句 subscribers :
INSERT INTO subscribers(email)
VALUES('[email protected]'),
('[email protected]');
它返回一个错误。
Error Code: 1062\. Duplicate entry '[email protected]' for key 'email'
如错误消息中所示,电子邮件 [email protected] 违反了 UNIQUE 约束。
但是,如果您改用该 INSERT IGNORE 语句。
INSERT IGNORE INTO subscribers(email)
VALUES('[email protected]'),
('[email protected]');
MySQL 返回一条消息,指示插入了一行而忽略了另一行。
1 row(s) affected, 1 warning(s): 1062 Duplicate entry '[email protected]' for key 'email' Records: 2 Duplicates: 1 Warnings: 1
要查找警告的详细信息,可以使用 SHOW WARNINGS 如下所示的命令:
SHOW WARNINGS;

总之,当您使用该 INSERT IGNORE 语句时,MySQL 不会发出错误,而是在发生错误时发出警告。
如果从 subscribers 表中查询数据,您会发现实际上只插入了一行,而导致错误的行却没有。

MySQL INSERT IGNORE 和 STRICT 模式
当严格模式打开时, INSERT 如果您尝试将无效值插入表中,MySQL 将返回错误并中止该语句。
但是,如果使用该 INSERT IGNORE 语句,MySQL 将发出警告而不是错误。此外,在将值添加到表之前,它会尝试调整值以使其有效。
考虑以下实例。
首先,我们创建一个名为 tokens 的新表:
CREATE TABLE tokens (
s VARCHAR(6)
);
在此表中,该列 s 仅接受长度小于或等于 6 的字符串。
其次,将长度为 7 的字符串插入 tokens 表中。
INSERT INTO tokens VALUES('abcdefg');
MySQL 发出以下错误,因为开启了严格模式。
Error Code: 1406\. Data too long for column 's' at row 1
第三,使用 INSERT IGNORE 语句插入相同的字符串。
INSERT IGNORE INTO tokens VALUES('abcdefg');
MySQL 在将数据插入 tokens 表之前截断了数据。此外,它还发出警告。

在本教程中,您学习了如何使用 MySQL INSERT IGNORE 语句向表中插入行并忽略导致错误的行的错误。