牛叔叔 的笔记

好好学习

2024-12-12 08:56

INSERT ... ON DUPLICATE KEY UPDATE实现如果记录存在则更新,否则插入

牛叔叔

数据库

(97)

(0)

收藏

在MySQL中,你可以使用 INSERT ... ON DUPLICATE KEY UPDATE 语句来实现“如果记录存在则更新,否则插入”的逻辑。这要求你的表具有唯一键或主键约束(通常是在ID列上)。

以下是一个示例,假设你有一个名为 my_table 的表,该表有一个名为 id 的唯一键列以及其他一些列(例如 value):

sql复制代码


CREATE TABLE my_table (

id INT PRIMARY KEY,

value VARCHAR(255)

);

你可以使用以下 INSERT ... ON DUPLICATE KEY UPDATE 语句来根据ID进行比较,如果ID相同则更新 value 列,如果ID不相同则插入新记录:

sql复制代码


INSERT INTO my_table (id, value)

VALUES (1, 'new_value')

ON DUPLICATE KEY UPDATE value = VALUES(value);

在这个语句中:

  • VALUES(value) 是指你尝试插入的值。

  • ON DUPLICATE KEY UPDATE 子句指定在发生主键或唯一键冲突时要执行的更新操作。

这意味着如果 id = 1 的记录已经存在,那么 value 列将被更新为 'new_value'。如果 id = 1 的记录不存在,那么将插入一条新记录 (1, 'new_value')

示例

假设你的表 my_table 初始是空的:

sql复制代码


mysql> SELECT * FROM my_table;

Empty set (0.00 sec)

执行以下语句:

sql复制代码


INSERT INTO my_table (id, value)

VALUES (1, 'first_value')

ON DUPLICATE KEY UPDATE value = VALUES(value);

结果:

sql复制代码


mysql> SELECT * FROM my_table;

+----+-------------+

| id | value       |

+----+-------------+

|  1 | first_value |

+----+-------------+

1 row in set (0.00 sec)

再次执行相同的语句(或不同的值):

sql复制代码


INSERT INTO my_table (id, value)

VALUES (1, 'second_value')

ON DUPLICATE KEY UPDATE value = VALUES(value);

结果:

sql复制代码


mysql> SELECT * FROM my_table;

+----+---------------+

| id | value         |

+----+---------------+

|  1 | second_value  |

+----+---------------+

1 row in set (0.00 sec)

插入一个新ID:

sql复制代码


INSERT INTO my_table (id, value)

VALUES (2, 'third_value')

ON DUPLICATE KEY UPDATE value = VALUES(value);

结果:

sql复制代码


mysql> SELECT * FROM my_table;

+----+---------------+

| id | value         |

+----+---------------+

|  1 | second_value  |

|  2 | third_value   |

+----+---------------+

2 rows in set (0.00 sec)

这个语句非常适用于需要根据唯一键进行“插入或更新”操作的场景。


0条评论

点击登录参与评论