PHP 中的单个操作必须经过以下步骤:
- 执行否。来自 PHP PDO 的 mysql 语句,基于大量的业务逻辑。
- 执行存储过程。
- 从 PDO 执行更多 MySQL 语句。
整个过程需要是一个单一的交易。如果 MySQL 存储过程发生任何错误,则必须回滚整个事务。(存储过程具有创建临时表、执行基于游标的扫描和执行插入的查询。)即使在存储过程之后的 PDO 中发生错误,事务也必须完全回滚,包括在存储过程。
基于 PDO 的查询在很久以前就被编程了。存储过程是根据客户的新要求而新推出的。
在 PHP 中,Transaction 在 Step 1 开始时启动。在 Step 3 结束时有一个 commit。最后有一个 catch 块,导致回滚。
是否应该在存储过程中启动事务?如果是这样,如何在错误时完全回滚?还是我们应该在存储过程中手动将 auto-commit 设置为 false?或者,是否有其他方法可以通知 MySQL 这个存储过程已经是事务的一部分。
如果不是,是否保证整个操作的原子性?