9.2 INSERT IGNORE

在本教程中,您将学习如何使用MySQL INSERT IGNORE语句将数据插入到表中。

1. MySQL INSERT IGNORE语句简介

当使用INSERT语句向表中添加一些行数据并且在处理期间发生错误时,INSERT语句将被中止,并返回错误消息。因此,可能不会向表中没有插入任何行。

但是,如果使用INSERT INGORE语句,则会忽略导致错误的行,并将其余行插入到表中。

INSERT INGORE语句的语法如下:

INSERT IGNORE INTO table(column_list)
VALUES( value_list),
      ( value_list),
      ...

请注意,IGNORE子句是MySQL对SQL标准的扩展。

2. MySQL INSERT IGNORE示例

为了演示,我们将创建一个名为订阅者(subscribers)的新表。

USE testdb;

CREATE TABLE IF NOT EXISTS subscribers (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(50) NOT NULL UNIQUE
);

UNIQUE约束确保电子邮件列中不存在重复的电子邮件。

以下语句在subscribers表中插入一个新行:

上面语句它按预期那样工作。接下来,我们来执行另一个语句,将两行插入到subscribers者表中:

它将返回一个错误:

如错误消息中所示,电子邮件yiibai.com@gmail.com值重复而导致违反UNIQUE约束。

但是,如果您使用INSERT IGNORE语句,则其它语句将会继续执行 -

MySQL服务器返回一条消息,显示插入一行,另一行被忽略。

如果使用SHOW WARNINGS语句,就会发现警告的详细信息:

所以当使用INSERT IGNORE语句来执行插入数据时,MySQL只发出警告而不是发出错误,以防发生错误退出其它数据无法插入。

如果查询subscribers表中的数据,就会发现实际只有一行数据插入,导致错误的行被忽略。

3. MySQL INSERT IGNORE和STRICT模式

STRICT模式打开时,如果您尝试将无效值插入到表中,MySQL将返回错误并中止INSERT语句。

但是,如果使用INSERT IGNORE语句,则MySQL将发出警告而不是错误。 此外,它将尝试调整值以使其在插入表之前有效。

请来看看以下示例。

首先,我们创建一个名为tokens的新表:

在此表中,列只接受长度小于或等于6的字符串。接下来,如果将长度为7的字符串插入到tokens表中,那么会发生什么?

由于STRICT模式已打开,MySQL发出以下错误 -

现在,使用INSERT IGNORE语句重新插入相同的字符串。

将MySQL截断的数据插入到tokens表中。 此外,它发出警告。使用 SHOW WARNINGS 查看错误提示 -

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

Last updated

Was this helpful?