gpt4 book ai didi

MySQL - 在单个查询中更新列的顺序

转载 作者:行者123 更新时间:2023-11-29 07:01:26 25 4
gpt4 key购买 nike

我正在使用 MySQL InnoDB。

我想更新一个表并控制每一列的更新顺序。如果可能,全部在一个查询中。原因是我有一个游戏队列系统。当你完成 queue_1 时,我希望它被赋予 queue_2 的值,然后删除 queue_2。

现在我从中得到了不可预测的结果。有时 total_price_2 设置为零,然后加载到 total_price_1。两者都变为零。 (不是我想要的。)

我读到数据库决定运行更新的顺序。如果我必须进行两次更新,那很好。我的目标是表现。

UPDATE
queue
SET
queue_1 = queue_2,
total_price_1 = total_price_2,
total_wait_1 = total_wait_2,
queue_2 = '',
total_price_2 = 0,
total_wait_2 = 0
WHERE id IN(1,2,3)

最佳答案

按照 MichaelRushton 的建议,检查更新前 total_price_2 是否为 0 .

在 MySQL 中,单表 UPDATE 查询是从“左到右”处理的,这在 UPDATE 语句文档中有说明:

Single-table UPDATE assignments are generally evaluated from left to right. For multiple-table updates, there is no guarantee that assignments are carried out in any particular order. (Source)

具体来说,请注意这个例子:

The second assignment in the following statement sets col2 to the current (updated) col1 value, not the original col1 value. The result is that col1 and col2 have the same value. This behavior differs from standard SQL.

UPDATE t1 SET col1 = col1 + 1, col2 = col1;


旁注

附带说明一下,您还可以使用 ORDER BY 子句显式指定要更新的的顺序:

With no WHERE clause, all rows are updated. If the ORDER BY clause is specified, the rows are updated in the order that is specified. (Source)

关于MySQL - 在单个查询中更新列的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007229/

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