replace into 和 insert into on duplicate key update 的不同在于:
replace into 操作本质是对重复的记录先 delete 后 insert, 如果更新的字段不全会将缺失的字段置为缺省值, 用这个要悠着点否则不小心清空大量数据可不是闹着玩的
insert into 则是只 update 重复记录, 不会改变其它字段
3. 创建临时表, 先更新临时表, 然后从临时表中 update
- create temporary table tmp(id int(4) primary key,dr varchar(50));
- insert into tmp values (0,gone), (1,xx),...(m,yy);
- update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
注意: 这种方法需要用户有 temporary 表的 create 权限
4 使用 mysql 自带的语句构建批量更新
mysql 实现批量 可以用点小技巧来实现:
- UPDATE yoiurtable
- SET dingdan = CASE id
- WHEN 1 THEN 3
- WHEN 2 THEN 4
- WHEN 3 THEN 5
- END
- WHERE id IN (1,2,3)
这句 sql 的意思是, 更新 dingdan 字段, 如果 id=1 则 dingdan 的值为 3, 如果 id=2 则 dingdan 的值为 4
where 部分不影响代码的执行, 但是会提高 sql 执行的效率确保 sql 语句仅执行需要修改的行数, 这里只有 3 条数据进行更新, 而 where 子句确保只有 3 行数据执行
例子: UPDATE book
SET Author = CASE id
WHEN 1 THEN 黄飞鸿
WHEN 2 THEN 方世玉
WHEN 3 THEN 洪熙官
- END
- WHERE id IN (1,2,3)
如果更新多个值的话, 只需要稍加修改:
- UPDATE categories
- SET dingdan = CASE id
- WHEN 1 THEN 3
- WHEN 2 THEN 4
- WHEN 3 THEN 5
- END,
- title = CASE id
- WHEN 1 THEN New Title 1
- WHEN 2 THEN New Title 2
- WHEN 3 THEN New Title 3
- END
- WHERE id IN (1,2,3)
来源: http://www.bubuko.com/infodetail-2492477.html