gpt4 book ai didi

mysql - 根据 1 个 CASE 条件更新多个列

转载 作者:行者123 更新时间:2023-11-30 22:58:08 25 4
gpt4 key购买 nike

我有一个程序需要将其频繁更改的值(在临时内存中)与数据库同步。该表中的关键键(不是主键!)是 id 列。我的程序更改了 id 但也在内存中保留了旧的 id

现在,我想在一个语句中为多个记录/行更新几个指定的列。此外,对于 4 GB RAM 和 ~ 50 MBit/s 连接,在 1 秒内处理 5 到 10 条这样的语句应该相当快,这不仅用于这些 sql 调用。

我的 sql 规范

  • 服务器:127.0.0.1 通过
  • TCP/IP
  • 软件:MySQL
  • 软件版本:5.5.27 - MySQL 社区服务器 (GPL)
  • 协议(protocol)版本:10
  • 服务器字符集:UTF-8 Unicode (utf8)

我试着用括号...

UPDATE someTable
SET (id, name) = CASE id
WHEN 1 THEN (111, "Dr. Frankenstein")
WHEN 2 THEN (222, "the Monster")
WHEN 3 THEN (333, "Mr. X")
ELSE (id, name) END
WHERE id IN (1, 2, 3)

...这只会导致以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(id, name) = CASE id WHEN 1 THEN (111, "Dr. Frankenstein") WHEN 2 THEN (222,' at line 2

知道我想知道:有没有一种方法可以用当前语法在一个语句中完成它?这样可行吗?还是我应该将它分成多个语句,这在进行 sql 调用的程序方面很丑陋。

欢迎回答和建议!

最佳答案

case 语句只返回一个值:

UPDATE someTable
SET id = (CASE id WHEN 1 THEN 111 WHEN 2 THEN 222 WHEN 3 THEN 333 ELSE id END),
name = (CASE id WHEN 1 THEN 'Dr. Frankenstein'
WHEN 2 THEN 'the Monster'
WHEN 3 THEN 'Mr. X'
ELSE name
END)
WHERE id IN (1, 2, 3);

为了提高性能,请确保在 id 上建立索引。这将有助于找到要更新的记录。请注意,更改 id 值需要更新索引,这可能比正常的 update 要长一些。但是,预计每秒 5-10 笔交易是合理的。

关于mysql - 根据 1 个 CASE 条件更新多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com