2013-06-04 110 views
4

如果我是正確的,PDO交易不是真正的交易:它們只是關閉自動提交(請參閱documentation)。PDO交易是否阻塞,直到所有其他交易被提交?

因此,如果我有一個事務A刪除行和修改同一行的事務B,可能會發生以下情況。

  1. 事務A啓動並關閉自動提交。
  2. 事務B啓動並關閉自動提交。
  3. 事務A刪除一行。
  4. 事務B修改同一行。
  5. 事務A完成並提交更改。
  6. 事務B完成並提交更改。

但是在第6步中,該行在步驟5中已經被刪除。會發生什麼情況?

此外,我如何確保事務B阻塞,直到事務A被提交?僅供參考,我正在使用帶有innoDB的mysql的PDO。

謝謝。

+0

你認爲「交易」和「不能自動提交的陳述」之間的區別是什麼?他們是一樣的東西。在步驟3中,當事務A刪除該行時,MySQL將在該行上設置「排他鎖定」,直到該事務被提交或回滾;因此交易B將在步驟4等待直到步驟5發生。 – eggyal

+0

我認爲事務會自動阻止其執行,直到所有其他可能修改相同行的事務都被提交。我可能是錯的。 – CookieMonster

+0

請參閱http://dev.mysql.com/doc/en/commit.html – eggyal

回答

0

正如@eggyal所指出的那樣,事務可以同時發生,但DELETE語句在該行放置排它鎖直到事務被提交,因此事務B將在步驟4自動阻塞,直到事務A被提交。獨佔鎖定塊全部寫入並讀取。