使用自带的语句构建批量更新
mysql 实现批量 可以用点小技巧来实现:
1 2 3 4 5 6 7 | UPDATE tableName SET orderId = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END WHERE id IN (1,2,3) |
或
1 2 3 4 5 6 7 | UPDATE tableName SET orderId = CASE WHEN id=1 THEN 3 WHEN id=2 THEN 4 WHEN id=3 THEN 5 END WHERE id IN (1,2,3) |
这句sql 的意思是,更新orderId 字段,如果id=1 则orderId 的值为3,如果id=2 则orderId 的值为4……
where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。
如果更新多个值的话,只需要稍加修改:
1 2 3 4 5 6 7 8 9 10 11 12 | UPDATE categories SET orderId = 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) |
或
1 2 3 4 5 6 7 8 9 10 11 12 | UPDATE categories SET orderId = CASE WHEN id= 1 THEN 3 WHEN id= 2 THEN 4 WHEN id= 3 THEN 5 END, title = CASE WHEN id= 1 THEN 'New Title 1' WHEN id= 2 THEN 'New Title 2' WHEN id= 3 THEN 'New Title 3' END WHERE id IN ( 1 , 2 , 3 ) |
参考: