PDO事务是否会阻塞,直到所有其他事务提交?

4
如果我没记错的话,PDO事务并不是真正的事务:它们只是关闭自动提交(请参阅文档)。
因此,如果我有一个删除行的事务A和一个修改同一行的事务B,则可能发生以下情况:
1. 事务A开始并关闭自动提交。 2. 事务B开始并关闭自动提交。 3. 事务A删除一行。 4. 事务B修改同一行。 5. 事务A完成并提交更改。 6. 事务B完成并提交更改。
但在第6步时,该行已在第5步中被删除。会发生什么?
另外,如何确保让事务B阻塞直到事务A提交?FYI,我正在使用带有InnoDB的PDO和MySQL。
谢谢。

你认为“事务”和“非自动提交的语句”之间有什么不同?实际上它们是一样的。在步骤3,当事务A删除行时,MySQL会对该行施加“排他锁”,直到事务提交或回滚;因此,在步骤4,事务B将等待步骤5完成。 - eggyal
我曾认为事务会自动阻塞其执行,直到所有可能修改相同行的其他事务都已提交。但我可能是错的。 - CookieEater
请参阅http://dev.mysql.com/doc/en/commit.html。 - eggyal
我明白了,所以我错了。谢谢你帮助我。 - CookieEater
1个回答

0
正如@eggyal所指出的那样,事务可以同时发生,但DELETE语句会在事务提交之前对行施加独占锁定,因此事务B将自动在步骤4处阻塞,直到事务A被提交。独占锁定会阻止所有写入和读取操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接