【问题标题】:Do PDO transactions block until all other transactions are committed?在提交所有其他事务之前,PDO 事务是否会阻塞?
【发布时间】:2013-05-31 12:28:38
【问题描述】:

如果我是正确的,PDO 事务并不是真正的事务:它们只是关闭自动提交(参见 documentation)。

因此,如果我有一个删除行的事务 A 和修改同一行的事务 B,则可能会发生以下情况。

  1. 事务 A 启动并关闭自动提交。
  2. 事务 B 启动并关闭自动提交。
  3. 事务 A 删除一行。
  4. 事务 B 修改了同一行。
  5. 事务 A 完成并提交更改。
  6. 事务 B 完成并提交更改。

但在第 6 步,该行已在第 5 步中删除。会发生什么?

另外,我怎样才能确保让事务 B 阻塞,直到事务 A 被提交?仅供参考,我正在使用 PDO 和 mysql 和 innoDB。

谢谢。

【问题讨论】:

  • 您认为“事务”和“未自动提交的语句”之间的区别是什么?他们是一样的东西。第3步,当事务A删除行时,MySQL会对该行放置“排他锁”,直到事务提交或回滚;因此事务 B 将在第 4 步等待,直到第 5 步发生。
  • 我认为事务会自动阻止其执行,直到所有其他可能修改相同行的事务都被提交。我可能错了。
  • 我明白了,所以我错了。谢谢你帮助我。

标签: mysql database pdo


【解决方案1】:

正如@eggyal 指出的那样,事务可以同时发生,但 DELETE 语句会在行上设置排他锁,直到事务提交,所以事务 B 将在第 4 步自动阻塞,直到事务 A 被提交。排他锁会阻止所有写入和读取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2011-07-24
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多