概述
ON DUPLICATE KEY UPDATE 主要是用于插入和更新一起的操作,当一条数据插入时,会根据主键约束和唯一性约束选择插入操作还是更新操作。也可以做批量的插入或更新操作。
- 当主键重复时,执行Update操作
- 当主键不重复,唯一性约束字段重复时,执行Update操作
- 当主键不重复,唯一性约束字段也不重复时,执行Insert操作
语法
也可做批处理
INSERT INTO table(colum1,colum2,colum3...) VALUES (value1,value2,value3...)
ON DUPLICATE KEY UPDATE
colum1 = value1, colum2 = value2, colum3 = value3 ...
例子
user表
id为主键,code有唯一性约束
插入三条记录
insert into
`user` (id,code,age,username,password)
values (11,'aa',18,'zhangsan','123'),
(12,'bb',18,'lisi','123'),
(13,'cc',18,'wangwu','123');
执行操作
ps:更新操作并未修改id
insert into
`user` (id,code,age,username,password)
values (11,'aa',18,'zhangsan','123'),
(120,'bb',18,'lisi','123456'),
(13,'cc',18,'wangwu','123456'),
(14,'dd',18,'laoliu','123')
as temp
on duplicate key update
code = temp.code,age = temp.age,username = temp.username,password = temp.password;
注意:这里用户zhangsan未改变,lisi更改了id和密码,wangwu更改了密码,新增了一条用户记录laoliu
结果
zhangsan未改变
lisi密码更改
wangwu密码更改
lailiu新增成功