当遇到需要根据条件进行多条数据更新的时候,会使用case when,如下:
update TABLE set column1 = CASE
WHEN column2 = 'name1' then 'modify1'
WHEN column2 = 'name2' then 'modify2'
end;
但是这里有一个坑:当使用这个sql进行更新的时候,满足条件的语句更新成该有的值
但是其他在表中不满足sql条件的数据行的column1会被置成空,造成严重的线上问题
所以case when在使用的时候应该避免去修改其他不满足条件的数据行,应该使用where圈定改动数据行的范围:
update TABLE set column1 = CASE
WHEN column2 = 'name1' then 'modify1'
WHEN column2 = 'name2' then 'modify2'
end
where column2 in ('name1','name1');
如果真的不放心使用在线上环境,那还是老老实实的一条一条去更新吧