MySQL INSERT IGNORE子句

INSERT语句是MySQL和其他数据库中最基本、最有用的语句之一。

它允许我们通过引用表名和提供表列的布局将记录插入到现有表中。然后提供希望插入到表中的值。

但是,当涉及到INSERT语句时,我们需要确保每个指定的行都不包含错误。否则,整个子句将失败。在处理多个插入记录时,这可能非常低效。

最好有一个回退,允许MySQL有选择地插入包含有效值的行,而忽略不符合要求的行。这就是INSERT IGNORE子句发挥作用的地方。

在本教程中,我们将学习如何使用INSERT IGNORE子句来允许MySQL忽略任何包含无效数据的行,而不是终止整个插入块。

语法:

下面是MySQL数据库中INSERT IGNORE语句的基本语法:

在表中插入IGNORE

值(value_list),

(value_list),

 

INSERT IGNORE子句是特定于MySQL数据库的,在其他数据库系统中不受支持,因为它不是SQL标准的一部分。

然而,其他数据库引擎提供了类似的实现,使用子句如INSERT ON DUPLICATE KEY UPDATE, INSERT INTO ON CONFLICT DO NOTHING (PostgreSQL)等。

MySQL INSERT IGNORE子句

让我们研究一个示例,演示如何在MySQL中使用INSERT IGNORE子句。

考虑这个示例表,它创建了一个包含产品信息的基本表:

创建表

INT主键AUTO_INCREMENT;

product_name VARCHAR (255),

类别VARCHAR (255),

price DECIMAL(10,2),

量INT,

expiration_date日期,

条形码长整型数字

);

 

创建表之后,让我们尝试将包含错误的行插入到表中。

INSERT INTO products (product_name, category, price, quantity, expiration_date, barcode)



(“Chef Hat 25cm”,“bakery”,24.67,57,“2023-09-09”,2854509564204),

(“鹌鹑蛋罐头”,“储藏室”,17.99,67,“2023-09-29”,1708039594250),

(“面包房”,92.53,10日,“2023-09-22”,8704051853058);

 

您可能会注意到,最后一行包含一个错误。这是为了演示当我们尝试像前面的示例中提供的那样插入数据时会发生什么。

一旦我们运行了前面的查询,它应该返回如下错误消息:

SQL Error[1064][42000]:你的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获得在第5行附近','bakery', 92.53, 10, '2023-09-22', 8704051853058)'使用的正确语法

 

因此,MySQL将终止整个INSERT语句,即使前两行是有效的。为了克服这个问题,我们可以像下面这样使用INSERT IGNORE子句:

INSERT IGNORE INTO products (product_name, category, price, quantity, expiration_date, barcode)



(“Chef Hat 25cm”,“bakery”,24.67,57,“2023-09-09”,2854509564204),

(“鹌鹑蛋罐头”,“储藏室”,17.99,67,“2023-09-29”,1708039594250),

(“面包房”,92.53,10日,“2023-09-22”,8704051853058);

 

MySQL将插入有效的记录,而忽略无效的记录。

结论

在本教程中,我们学习了如何在MySQL中使用INSERT IGNORE子句来跳过INSERT语句中包含错误的任何行,同时应用有效的行。