【发布时间】:2013-05-31 12:28:38
【问题描述】:
如果我是正确的,PDO 事务并不是真正的事务:它们只是关闭自动提交(参见 documentation)。
因此,如果我有一个删除行的事务 A 和修改同一行的事务 B,则可能会发生以下情况。
- 事务 A 启动并关闭自动提交。
- 事务 B 启动并关闭自动提交。
- 事务 A 删除一行。
- 事务 B 修改了同一行。
- 事务 A 完成并提交更改。
- 事务 B 完成并提交更改。
但在第 6 步,该行已在第 5 步中删除。会发生什么?
另外,我怎样才能确保让事务 B 阻塞,直到事务 A 被提交?仅供参考,我正在使用 PDO 和 mysql 和 innoDB。
谢谢。
【问题讨论】:
-
您认为“事务”和“未自动提交的语句”之间的区别是什么?他们是一样的东西。第3步,当事务A删除行时,MySQL会对该行放置“排他锁”,直到事务提交或回滚;因此事务 B 将在第 4 步等待,直到第 5 步发生。
-
我认为事务会自动阻止其执行,直到所有其他可能修改相同行的事务都被提交。我可能错了。
-
我明白了,所以我错了。谢谢你帮助我。