最近在整理项目里面的存储过程,主要是添加注解和归类。
发现了一个之前没怎么使用过的sql语法。ON DUPLICATE KEY UPDATE。去查看了一些资料。如下(使用的mysql)
INSERT INTO student (
id,
name,
age,
class
)(
SELECT
id,
name,
age,
class
FROM
student
WHERE
`name` = 'NIC'
) ON DUPLICATE KEY UPDATE name =
VALUES
(name),
age =
VALUES
(age),
class =
VALUES
(class);
从上面的sql可以简单看成,这个 ON DUPLICATE KEY UPDATE大概的意思是出现重复主键的时候,进行更新。没有重复的时候进行插入操作。
从查到的资料中,有一点在使用的时候要注意:
更新的内容中unique key或者primary key最好保证一个,不然不能保证语句执行正确
如果上面的sql除了id,name也是一个唯一键,那么结果就会出现错误。
也就是说会出现两种情况导致执行update,但是udpate只会执行一次。这样就不能保证更新的数据行是你自己想要的。