SQL 中批量更新应该怎么写?

2020-09-13 17:52:03 +08:00
 mebtte

比如我有一个表 { id: int, order: int } , 现在想批量更新, 比如 id=1 set order=2, id=2 set order=3 , id 和 order 对应的值是外面传进来的, 一条 update 语句能做到吗?

3401 次点击
所在节点    MySQL
15 条回复
ss098
2020-09-13 18:45:05 +08:00
不能。
codingadog
2020-09-13 18:47:48 +08:00
就俩字段?一对多多对一多对多根据情况加唯一索引然后 replace into
mccoymir
2020-09-13 19:33:35 +08:00
case when ...
a3613051
2020-09-13 19:39:02 +08:00
要么 case when 要么 jdbcurl 加上 allowMultiQueries=true 一次发多条。replace into 太暴力了 主键全变 关联表不是爆炸了。
fox0001
2020-09-13 19:52:55 +08:00
数量在可接受范围的话( 30 万以内吧),可以把对应关系导出到 CVS 或者 excel 文件,然后写个公式生成所有 update 语句,再丢到服务器上更新
zhangysh1995
2020-09-13 20:30:33 +08:00
````
update x set order = (
case
when 1
then 2

....
else
end
)
````
vone
2020-09-13 21:07:14 +08:00
update t
set t.order=ods.order
from xxx t
join (
select 1 id, 2 order
union all
select 2 id, 3 order
......
)ods on ods.id=t.id

数据量大时 ods 应改为使用临时表导入。
gavindexu
2020-09-13 22:43:32 +08:00
先建个表?索引 join 再 update 。
操作完成后,再把那个临时建的表 drop 掉。
wzwwzw
2020-09-13 23:23:18 +08:00
case when
buliugu
2020-09-13 23:24:51 +08:00
mysql 可以用 ON DUPLICATE KEY UPDATE
tomari
2020-09-14 00:37:46 +08:00
@gavindexu 这样不会有原子性的问题吗
xxxyy2y
2020-09-14 11:13:24 +08:00
4 楼已经说了,可以做到啊 allowMultiQueries=true xml 加个 foreach 标签就行了 批量更新 批量插入会打包成一个事务,要考虑表是否频繁更新,如果是频繁更新就容易产生锁表,
swcat
2020-09-14 12:41:32 +08:00
id 是主键吧, 那么可以这样
```sql
insert into tttt(`id`)

SELECT @row := @row + 1 AS id FROM
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t1,
(SELECT @row:=0) t

on duplicate key update `order` = `id`;
```
MaxFang
2020-09-14 21:10:32 +08:00
看表结构,如果有 uk,看情况可以使用 ON DUPLICATE KEY UPDATE 插入更新。
另外。。。推荐尽可能保持 SQL 的简单可读,赋值操作放在上层代码中解决。
THESDZ
2020-09-25 17:24:39 +08:00
update set value = case when id ='1' then 'v1' ... else value end
where id in ('1','2','3')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX