INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c); 或者 INSERT INTO table (id,a,b,c) select id,a,b,c from xxx ON DUPLICATE KEY UPDATE a=VALUES(a),b=VALUES(b),c=VALUES(c)
上面的mysql的一条语句实现了往表里插入数据,如果对应的主键上(假设主键是a)已经有数据了那么执行更新操作,更新字段c为新值。
这样一条语句简化了我们的开发代码,否则开发代码还要判断表里有没有相应的数据,如果没有那么插入数据、如果有那么执行更新操作。
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法! 这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景.
该sql在高并发环境下会有锁争用的问题,参考下面链接阅读