-
如果每条更新执行一次sql性能很低,也容易造成阻塞;
-
批量更新时又有可能遇到主键重复的问题
使用 ON DUPLICATE KEY UPDATE 一条sql解决批量更新和主键重复问题(id为主键)
1 2 3 4 5 6 7 8 9 10 |
|
它不但对唯一主键有效,对复合主键同样有效,复合主键设置:
1 |
|
不过ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法
如果数据已有则更新,发现 MySQL 已经提供了两种解决方法:
ON DUPLICATE KEY UPDATE
这个方法就是在 Insert 语句的时候,加上这个语句,如果数据库里面已有则更新。比如:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
我们还可以在 UPDATE 子句中使用 VALUES(col_name )函数从 INSERT 部分引用列值:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
插入多行情况:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
REPLACE INTO
REPLACE INTO 则会先删除数据,然后再插入。
REPLACE INTO table (a,b,c) VALUES (1,2,3);