使用数据库事务时,会导致COMMIT事务中的最终语句失败的可能条件(如果有的话)是什么,假设事务中的所有语句都已经执行而没有问题?
例如......假设您有一些两阶段或三阶段提交协议,其中您执行一堆语句,然后等待一些主进程告诉您何时可以最终提交事务:
-- <initial handshaking stuff>
START TRANSACTION;
-- <Execute a bunch of SQL statements>
-- <Inform master of readiness to commit>
-- <Time passes... background transactions happening while we wait>
-- <Receive approval to commit from master (finally!)>
COMMIT;
Run Code Online (Sandbox Code Playgroud)
如果您的代码到达最终的COMMIT语句并将其发送到您的DBMS,您是否会在该语句中收到错误(唯一性问题,数据库已满等)?什么错误?为什么?它们是如何出现的?它会根据您运行的DBMS而有所不同吗?
我见过一个代码示例,其中有人做了
$dbh->rollback();
Run Code Online (Sandbox Code Playgroud)
当发生PDOException时.我以为数据库会在这种情况下自动回滚?