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 实例

我们将创建一个名为 subscribers 演示的新表。

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;

MySQL INSERT IGNORE - 警告
MySQL INSERT IGNORE - 警告

总之,当您使用该 INSERT IGNORE 语句时,MySQL 不会发出错误,而是在发生错误时发出警告。

如果从 subscribers 表中查询数据,您会发现实际上只插入了一行,而导致错误的行却没有。

MySQL INSERT IGNORE - 订阅者表
MySQL INSERT IGNORE - 订阅者表

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 - 严格模式
MySQL INSERT IGNORE - 严格模式

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