SQL筆記(14)——事務

weixin_46722612發表於2020-11-16

資料庫事務( transaction)是訪問並可能操作各種資料項的一個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部資料庫操作組成。

詳情參見:https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1/9744607

Read Uncommitted

Read Uncommitted是隔離級別最低的一種事務級別。在這種隔離級別下,一個事務會讀到另一個事務更新後但未提交的資料,如果另一個事務回滾,那麼當前事務讀到的資料就是髒資料,這就是髒讀(Dirty Read)。

Read Committed

在Read Committed隔離級別下,一個事務可能會遇到不可重複讀(Non Repeatable Read)的問題。

不可重複讀是指,在一個事務內,多次讀同一資料,在這個事務還沒有結束時,如果另一個事務恰好修改了這個資料,那麼,在第一個事務中,兩次讀取的資料就可能不一致。

Repeatable Read

在Repeatable Read隔離級別下,一個事務可能會遇到幻讀(Phantom Read)的問題。

幻讀是指,在一個事務中,第一次查詢某條記錄,發現沒有,但是,當試圖更新這條不存在的記錄時,竟然能成功,並且,再次讀取同一條記錄,它就神奇地出現了。

Serializable

Serializable是最嚴格的隔離級別。在Serializable隔離級別下,所有事務按照次序依次執行,因此,髒讀、不可重複讀、幻讀都不會出現。

雖然Serializable隔離級別下的事務具有最高的安全性,但是,由於事務是序列執行,所以效率會大大下降,應用程式的效能會急劇降低。如果沒有特別重要的情景,一般都不會使用Serializable隔離級別。

預設隔離級別

如果沒有指定隔離級別,資料庫就會使用預設的隔離級別。在MySQL中,如果使用InnoDB,預設的隔離級別是Repeatable Read。

相關文章