跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • SQL 中批量更新应该怎么写?
未分類
6 9 月 2020

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

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

資深大佬 : mebtte 4

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

大佬有話說 (14)

  • 資深大佬 : ss098

    不能。

  • 資深大佬 : codingadog

    就俩字段?一对多多对一多对多根据情况加唯一索引然后 replace into

  • 資深大佬 : mccoymir

    case when …

  • 資深大佬 : a3613051

    要么 case when 要么 jdbcurl 加上 allowMultiQueries=true 一次发多条。replace into 太暴力了 主键全变 关联表不是爆炸了。

  • 資深大佬 : fox0001

    数量在可接受范围的话( 30 万以内吧),可以把对应关系导出到 CVS 或者 excel 文件,然后写个公式生成所有 update 语句,再丢到服务器上更新

  • 資深大佬 : zhangysh1995

    ““
    update x set order = (
    case
    when 1
    then 2

    ….
    else
    end
    )
    ““

  • 資深大佬 : vone

    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

    先建个表?索引 join 再 update 。
    操作完成后,再把那个临时建的表 drop 掉。

  • 資深大佬 : wzwwzw

    case when

  • 資深大佬 : buliugu

    mysql 可以用 ON DUPLICATE KEY UPDATE

  • 資深大佬 : tomari

    @gavindexu 这样不会有原子性的问题吗

  • 資深大佬 : xxxyy2y

    4 已经说了,可以做到啊 allowMultiQueries=true xml 加个 foreach 标签就行了 批量更新 批量插入会打包成一个事务,要考虑表是否频繁更新,如果是频繁更新就容易产生锁表,

  • 資深大佬 : swcat

    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

    看表结构,如果有 uk,看情况可以使用 ON DUPLICATE KEY UPDATE 插入更新。
    另外。。。推荐尽可能保持 SQL 的简单可读,赋值操作放在上层代码中解决。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具