【发布时间】:2015-06-22 22:17:32
【问题描述】:
我有一个脚本在我的 InnoDB 上执行多个 UPDATE,但是如果一个 UPDATE 失败,我希望所有其他 UPDATE 都回滚。所以我在网上搜索,我能找到的最好的是 PDO::beginTransaction。除了我希望我的数据库为每个 UPDATE 实际更新,如果其中一个失败,我需要删除每个以前的 UPDATE。我需要这个,因为这个脚本可以从多个用户运行,并且之前更新的行不应该再次更新。
示例:
这是我的表“reserver”:
id | idChambre | idReservation
---+-----------+--------------
0 | 1 | 1
第一行表示房间1与订单1匹配,因此无法再次匹配。因此,如果没有发生任何错误,该行将保持不变,但如果发生用户取消或超时事件,我希望删除该行。
所以现在我看到了两种方式:pdo Transaction(但我不知道如何)和我的实际方式:存储我的“reserver”表的每个 id 并在出现问题时将它们全部删除。
有没有更好的方法?我做错了吗?
英语不是我的母语,所以请客气。
【问题讨论】:
-
这正是交易的用途。是时候学习它们了。它们并不难。
-
但是当调用“commit”时,事务是否真的更新了我的数据库或者它是否完成了(正如我在任何地方看到的那样)?
-
调用commit的时候就完成了。这是交易运作方式的重要组成部分。
-
我可能表达得很糟糕,但您是否理解我希望在脚本结束之前实际更新我的行?我的意思是多个最终用户可以使用我的脚本,所以我需要更新我的数据库,所以不能选择两次“房间”,但是如果稍后在我的脚本中出现问题,则必须删除该行。我认为 pdo 事务会在脚本末尾进行每个更新,但与此同时,另一个用户可能已经选择了“房间”,而我将有 2 个用户拥有相同的“房间”。
-
我不知道如何解释这一点,但事务正是你需要的。阅读它们,你会看到的。
标签: php mysql pdo transactions innodb