SQL 插入时,如果主键已存在,则更新

MySQL

规则:如果你插入的记录导致一个 UNIQUE 索引或者 primary key 出现重复,那么就会认为该条记录存在,则执行 update 语句;反之,则执行 insert 语句。

如果行作为新记录被插入,则受影响行的值为 1;如果原有的记录被更新,则受影响行的值为 2,如果更新的数据和已有的数据一模一样,则受影响的行数是 0,这意味着不会去更新,也就是说即使你有的时间戳是自动记录最后一次的更新时间,这个时间戳也不会变动。

插入一行

1
2
3
INSERT INTO tbl_name (id, b, c) VALUES 
(1,2,3)
ON DUPLICATE KEY UPDATE b = 2, c = 3;

插入多行

1
2
3
4
INSERT INTO tbl_name (id, b, c) VALUES 
(1,2,3),
(2,3,4)
ON DUPLICATE KEY UPDATE b = VALUES(b);

SQL Server

1
2
3
4
5
MERGE INTO tbl_name as target 
USING (select 1 as id, 2 as b, 3 as c) as source(id, b, c)
ON (target.id = source.id)
WHEN MATCHED THEN UPDATE SET target.b = source.b, target.c = source.c
WHEN NOT MATCHED THEN INSERT (id, b, c) VALUES (source.id, source.b, source.c)
分享到:
Disqus 加载中...

如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理