MySQL中的INSERT INTO .. ON DUPLICATE KEY UPDATE语法
在MySQL中,我们使用INSERT INTO语句将一条或多条数据插入到数据表中。但是当我们尝试插入一个已经存在的记录时,MySQL会报Duplicate key错误。
为了避免这种错误,我们可以使用INSERT INTO .. ON DUPLICATE KEY UPDATE语法。这个语法允许我们在表中存在重复键时更新该记录,而不是插入一个新的记录。
这条语法的一般形式如下所示:
INSERT INTO table_name (column1, column2, ..) VALUES (value1, value2, ..)
ON DUPLICATE KEY UPDATE column1=value1, column2=value2, ..;
其中,table_name是您要更新的表的名称,column1、column2等是要插入或更新的列名称,value1、value2等是相应列的值。
在UPDATE子句中,您需要指定要更新的列及其新值。请注意,ON DUPLICATE KEY UPDATE子句中的值包括完整的列值,而不是仅包含要更新的值。
阅读更多:MySQL 教程
多项数据的INSERT INTO .. ON DUPLICATE KEY UPDATE
假设我们有一个名为products的表,其中包含以下列:id(主键)、name、description和price。我们已经向数据库中添加了几个产品,如下所示:
+----+----------+----------------+-------+
| id | name | description | price |
+----+----------+----------------+-------+
| 1 | iPhone | A smartphone | 800 |
| 2 | Samsung | An android phone | 700 |
| 3 | Sony | A music player | 400 |
+----+----------+----------------+-------+
现在,我们想一次插入多个产品并更新一些已存在的行。我们可以使用如下INSERT INTO .. ON DUPLICATE KEY UPDATE语法:
INSERT INTO products (id, name, price)
VALUES (1, 'iPhone X', 1000), (4, 'Huawei', 600)
ON DUPLICATE KEY UPDATE name=VALUES(name), price=VALUES(price);
上面的语法将插入一个新产品(Huawei)并更新一个现有的产品(iPhone)。这将导致以下结果:
+----+-----------+----------------+-------+
| id | name | description | price |
+----+-----------+----------------+-------+
| 1 | iPhone X | A smartphone | 1000 |
| 2 | Samsung | An android phone | 700 |
| 3 | Sony | A music player | 400 |
| 4 | Huawei | NULL | 600 |
+----+-----------+----------------+-------+
请注意,在例子中,我们只更新了name和price列,而没有更新description列,因为我们没有将其指定为要更新的列。
总结
本文介绍了MySQL中INSERT INTO .. ON DUPLICATE KEY UPDATE语法,以及如何在一次操作中插入多个记录并更新已经存在的记录。使用这个语法可以大大减少我们的代码量,并使我们的操作更加高效。
极客教程