1、replace into 批量更新
示例:修改年龄
replace INTO girl(id,age) VALUES(1,11),(2,12),(3,13);
id为1 2 3d的用户年龄修改成功,但是如果不指定cup_size的话,默认修改后为缺省值。
操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值
2、insert into ...on duplicate key update批量更新
INSERT INTO girl(id,age) VALUES(1,21),(2,22),(3,23)
on DUPLICATE KEY UPDATE age=VALUES(age);
如图年龄修改成功,cup_size值不变。这种方式只进行update
3、使用mysql 自带的语句构建批量更新
UPDATE girl SET age = CASE id
WHEN 1 THEN 31
WHEN 2 THEN 32
WHEN 3 THEN 33
END
WHERE id in(1,2,3);
- 【replace into】和【insert into】更新都依赖于主键或唯一值,并都可能造成新增记录的操作的结构隐患
- 【replace into】操作本质是对重复记录先delete然后insert,如果更新的字段不全缺失的字段将被设置成缺省值
- 【insert into】则只是update重复的记录,更改的字段只能依循公式值
- 【临时表】方式需要用户有temporary 表的create 权限(此处没有进行测试)
- 数量较少时【replace into】和【insert into】性能最好,数量大时【临时表】最好,【CASE】则具有通用型也不具结构隐患