MySQL事务中的多行多值更新

时间:2011-09-19 09:31:49

标签: mysql

我在MySQL中使用innodb表。我想更新表中的几行,每行都有不同的值,例如:

UPDATE tbl_1 SET
   col1=3  WHERE id=25,
   col1=5  WHERE id=26

在Postgres中,我相信这是可能的:

UPDATE tbl_1 SET col1 = t.col1 FROM (VALUES
        (25, 3)
        (26, 5)
) AS t(id, col1)
WHERE tbl_1.id = t.id;

如何在交易中高效率地完成这项工作?

到目前为止我遇到的问题:

  • 使用中间临时MEMORY表证明不是交易安全
  • 使用TEMPORARY表 - 显然是MEMORY类型 - 实际上没有文档记录,我无法找到它的工作原理以及它在我的情况下的工作情况的真实解释,例如关于每次事务后表是否被截断的任何讨论会议
  • 使用InnoDB表作为临时表并填充,加入更新然后在事务中截断它似乎是一件非常昂贵的事情;我一直在努力解决MySQL的糟糕吞吐量问题

1 个答案:

答案 0 :(得分:2)

是否根据col1

更新了id的案例和设置值
UPDATE tbl_1 SET col1=CASE id WHEN 25 THEN 3 WHEN 26 THEN 5 END WHERE id IN (25,26)