gpt4 book ai didi

php - 在事务启动之前使用值的多个更新语句 MySQL

转载 作者:行者123 更新时间:2023-11-30 00:36:33 27 4
gpt4 key购买 nike

我正在尝试在 MySQL 事务中运行多个更新语句,但我需要每个语句中的 WHERE 子句来引用事务开始之前存在的值。 (使用innoDB表。)

例如,我有以下航类表(经过简化,显而易见):

flight  aircraft     dep_time
1 1 05:00
2 1 06:00
3 1 07:00

4 2 05:00
5 2 06:00
6 2 07:00

我需要做的是将 1 号飞机 06:00 或之后出发的航类与 2 号飞机 06:00 或之后出发的航类交换。目前,我通过为每个航类分配一架中间飞机,然后将使用该中间飞机的航类更新为所需的飞机来实现此目的。例如:

UPDATE flights SET aircraft = 1001 WHERE aircraft = 1 AND dep_time >= 06:00
UPDATE flights SET aircraft = 1002 WHERE aircraft = 2 AND dep_time >= 06:00
UPDATE flights SET aircraft = 2 WHERE aircraft = 1001
UPDATE flights SET aircraft = 1 WHERE aircraft = 1002

看来我可以通过使用事务来避免两个额外的更新语句。另外,如果数据库中实际上有一架飞机 1001,我现在使用的方法会导致一个重大问题(我此时只是使用一个非常大的数字来确保不会发生这种情况)......我想避免。我的意图是做这样的事情:

START TRANSACTION();
UPDATE flights SET aircraft = 2 WHERE aircraft = 1 AND dep_time >= 06:00
UPDATE flights SET aircraft = 1 WHERE aircraft = 2 AND dep_time >= 06:00
COMMIT();

据我了解,第二个更新语句将看到第一个语句中更新的值,这将使一切变得困惑。有没有办法让两个 UPDATE 语句都使用事务启动时存在的值?如果没有,有人对如何处理这个问题有更好的建议吗?

我想要的结果是这样的:

flight  aircraft     dep_time
1 1 05:00
2 2 06:00
3 2 07:00

4 2 05:00
5 1 06:00
6 1 07:00

谢谢!如果不清楚,我深表歉意...

最佳答案

您需要向表中添加唯一列(通常它的名称为id并且为u​​nsigned big int auto_increment类型)

然后,只要每行都有唯一的 ID,您就可以根据需要交换行。

关于php - 在事务启动之前使用值的多个更新语句 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22122842/

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