2014-01-21 124 views
0

我正在通過MYSQL使用innoDB數據庫引擎。如果多個事務在幾毫秒內發生,數據庫如何執行事務?在執行下一個交易之前,它是否一次只允許一個交易並延遲?MYSQL如何優先查詢?

+0

單用戶線程在MySQL中是同步的。對於並發動作,有一個「TABLOCK」。 – BlitZ

+0

脫離主題,但幾乎沒有意見。 – EJP

+0

那麼InnoDB支持行級鎖,所以改變一個表的不同行可能幾乎同時進行(或那些在幾毫秒內) – spaceman

回答

1

單獨的連接可以同時運行的事務。隨着交易的進行,各種鎖(「互斥」)被獲取。在某些情況下(例如更新同一行的兩個連接),鎖將阻塞一個事務直到另一個事務完成。在某些情況下會發生「死鎖」,並且一個事務將被ROLLBACK。在其他情況下,一個事務將超時等待鎖。 (默認時間爲這50秒,我很少看到它。)

鎖被設計使它看起來無任何事務可以與任何其他干擾,然而讓交易運行「同時」。

0

在InnoDB中,所有用戶活動在事務內發生。

如果自動提交模式已啓用,則每個SQL語句將自行形成單個事務。 默認情況下,MySQL的啓動與啓用自動提交每個新連接的會話,因此MySQL的一個每個SQL語句之後提交如果語句未返回一個錯誤。如果語句返回錯誤,則提交或回滾行爲取決於錯誤。

啓用自動提交的會話可以通過以明確的START TRANSACTION或BEGIN語句啓動並以COMMIT或ROLLBACK語句結束來執行多語句事務。

如果自動提交模式與SET自動提交= 0會話中禁用,會話總有開放的交易。 COMMIT或ROLLBACK語句結束當前事務並開始一個新事務。開放。 COMMIT或ROLLBACK語句結束當前事務並開始一個新事務。

更多請閱讀: - http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html