MySQL ON DUPLICATE KEY UPDATE用法

MySQL ON DUPLICATE KEY UPDATE 用法
1
2
3
在 MySQL 中,ON DUPLICATE KEY UPDATE 是一个非常有用的语法,用于在插入数据时,如果遇到主键或唯一索引冲突,则执行更新操作,而不是插入新记录。这种方法可以简化代码,避免多次查询和判断。

基本用法

假设我们有一个表 user_admin_t,其中包含以下字段:

CREATE TABLE user_admin_t (
_id INT PRIMARY KEY,
password VARCHAR(255)
);
我们可以使用以下语句插入数据:

INSERT INTO user_admin_t (_id, password)
VALUES (1, '第一次插入的密码')
ON DUPLICATE KEY UPDATE
password = '更新后的密码';
如果 _id 为 1 的记录已经存在,则会更新 password 字段为 '更新后的密码'
1
2

批量插入和更新

ON DUPLICATE KEY UPDATE 也支持批量插入和更新。例如:

INSERT INTO user_admin_t (_id, password)
VALUES (1, '第一次插入的密码'), (2, '第二次插入的密码')
ON DUPLICATE KEY UPDATE
password = VALUES(password);
这条语句会插入两条记录,如果 _id 为 1 或 2 的记录已经存在,则会更新相应的 password 字段
1
2

注意事项

唯一索引或主键:ON DUPLICATE KEY UPDATE 依赖于唯一索引或主键。如果表中没有唯一索引或主键,则无法使用此语法
1

影响行数:如果是插入操作,影响行数为 1;如果是更新操作,影响行数为 2;如果更新的数据与已有数据相同,影响行数为 0
1

并发事务:在并发事务中使用 ON DUPLICATE KEY UPDATE 可能会导致死锁,因此需要谨慎使用
1

示例

以下是一个在 MyBatis 中使用 ON DUPLICATE KEY UPDATE 的示例:

INSERT INTO camera_info (cameraId, zone1Id, zone1Name, zone2Id, zone2Name, zone3Id, zone3Name, zone4Id, zone4Name) VALUES (#{cameraId}, #{zone1Id}, #{zone1Name}, #{zone2Id}, #{zone2Name}, #{zone3Id}, #{zone3Name}, #{zone4Id}, #{zone4Name}) ON DUPLICATE KEY UPDATE cameraId = VALUES(cameraId), zone1Id = VALUES(zone1Id), zone1Name = VALUES(zone1Name), zone2Id = VALUES(zone2Id), zone2Name = VALUES(zone2Name), zone3Id = VALUES(zone3Id), zone3Name = VALUES(zone3Name), zone4Id = VALUES(zone4Id), zone4Name = VALUES(zone4Name); 这个示例展示了如何在 MyBatis 中使用 ON DUPLICATE KEY UPDATE 进行单条记录的插入或更新 1 。

总之,ON DUPLICATE KEY UPDATE 是一个强大的工具,可以简化数据插入和更新的逻辑,但在使用时需要注意一些细节和潜在的问题
1
2

posted @ 2025-06-27 11:55  赏金猎人小熊  阅读(275)  评论(0)    收藏  举报