MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
ysn2233
V2EX  ›  MySQL

请问一个 SQL 批量更新的问题

  •  
  •   ysn2233 · Mar 21, 2024 · 2250 views
    This topic created in 792 days ago, the information mentioned may be changed or developed.

    有需求要求减少与数据库的交互次数,希望能一次通信实现很多行数据一起更新(更新的列值都不一样)。 开始想的是用INSERT INTO mytable(a, b, c) VALUES (a1,b1,c1),(a2,b2,c2) ON DUPLICATE KEY UPDATE a=values(a), b=values(b),c=values(c)这种方式,但是又要求,b 的值要大于数据库原有的值才行, 就是类似于INSERT INTO mytable(a, b, c) VALUES (a1,b1,c1),(a2,b2,c2) ON DUPLICATE KEY UPDATE a=values(a), b=values(b),c==values(c) WHERE values(b) > b这种结果,但是 INSERT 的语法又不支持 WHERE 条件。

    然后想的是多条 UPDATE 同时执行,分号隔开那种,但是这种情况好像如果要一次性发送的话没法用 PrepareStatement 预编译?好像也没法防注入,而且这种情景貌似和数据库通信都是走的文本协议非二进制协议?

    剩下的网上看着好像就都是UPDATE mytable SET b = ( CASE WHEN a=a1 AND b1>b THEN b=b1 WHEN a=a2 AND b2>b THEN b=b2, c=c2), c = ( CASE WHEN a=a1 AND b1>b, c=c1, WHEN a=a2 AND b2>b THEN c=c2)或者是 INSERT INTO 配合 IF 函数,感觉都好繁琐 ,求指教最好的办法是什么

    2 replies    2024-03-21 11:39:38 +08:00
    youngPacce
        1
    youngPacce  
       Mar 21, 2024
    ysn2233
        2
    ysn2233  
    OP
       Mar 21, 2024
    @youngPacce 感谢大佬我研究一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2774 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:12 · PVG 09:12 · LAX 18:12 · JFK 21:12
    ♥ Do have faith in what you're doing.