資料庫事務四種隔離級別

2022-08-26 22:21:24 字數 1163 閱讀 8444

在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted(未授權讀取、讀未提交)、read committed(授權讀取、讀提交)、repeatable read(可重複讀取)、serializable(序列化),這四個級別可以逐個解決髒讀、不可重複讀、幻讀這幾類問題。

下面介紹一下這幾種事務隔離級別的區別以及可能出現的問題:

read uncommitted(未授權讀取、讀未提交):

如果乙個事務已經開始寫資料,則另外乙個事務則不允許同時進行寫操作,但允許其他事務讀此行資料。該隔離級別可以通過「排他寫鎖」實現。

避免了更新丟失,卻可能出現髒讀。也就是說事務b讀取到了事務a未提交的資料。

read committed(授權讀取、讀提交):

讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行。

該隔離級別避免了髒讀,但是卻可能出現不可重複讀。事務a事先讀取了資料,事務b緊接了更新了資料,並提交了事務,而事務a再次讀取該資料時,資料已經發生了改變。

repeatable read(可重複讀取):

讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。

避免了不可重複讀取和髒讀,但是有時可能出現幻讀。這可以通過「共享讀鎖」和「排他寫鎖」實現。

serializable(序列化):

提供嚴格的事務隔離。它要求事務序列化執行,事務只能乙個接著乙個地執行,但不能併發執行。如果僅僅通過「行級鎖」是無法實現事務序列化的,必須通過其他機制保證新插入的資料不會被剛執行查詢操作的事務訪問到。

序列化是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。

隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。對於多數應用程式,可以優先考慮把資料庫系統的隔離級別設為read committed。它能夠避免髒讀取,而且具有較好的併發效能。儘管它會導致不可重複讀、幻讀和第二類丟失更新這些併發問題,在可能出現這類問題的個別場合,可以由應用程式採用悲觀鎖或樂觀鎖來控制。

大多數資料庫的預設級別就是read committed,比如sql server , oracle。

mysql的預設隔離級別就是repeatable read。

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...