MySQL中的INSERT INTO .. ON DUPLICATE KEY UPDATE语法

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语法,以及如何在一次操作中插入多个记录并更新已经存在的记录。使用这个语法可以大大减少我们的代码量,并使我们的操作更加高效。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程