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约束确保电子邮件列中不存在重复的电子邮件。
以下语句在用户表中插入新行:
INSERT INTO subscribers(email) VALUES('[email protected]');
它按预期工作。
让我们执行另一条语句,将两行插入用户表:
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会发出警告以防发生错误。
如果从订户表中查询数据,您会发现实际上只插入了一行,而导致错误的行却没有插入。
MySQL INSERT IGNORE和STRICT模式
启用严格模式后,如果尝试向表中插入无效值,MySQL将返回错误并中止INSERT语句。
但是,如果使用INSERT IGNORE语句,MySQL将发出警告而不是错误。
另外,在将值添加到表之前,它将尝试调整值以使其有效。
考虑以下示例。
首先,我们创建一个名为tokens的新表:
CREATE TABLE tokens ( s VARCHAR(6) );
在此表中,列s仅接受长度小于或等于六的字符串。
其次,在令牌表中插入一个长度为7的字符串。
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将数据插入令牌表之前将其截断。
此外,它还会发出警告。
在本教程中,您学习了如何使用MySQL INSERT IGNORE语句将行插入表中,并忽略导致错误的行的错误。