資料庫四種隔離級別

2021-08-16 15:45:26 字數 752 閱讀 4841

(零)沒有併發控制

存在的問題:更新遺失。

解決辦法就是下面的「可讀取未確認」。

(一)可讀取未確認(read uncommitted)

寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。

存在的問題:髒讀。即讀取到不正確的資料,因為另乙個事務可能還沒提交最終資料,這個讀事務就讀取了中途的資料,這個資料可能是不正確的。

解決辦法就是下面的「可讀取確認」。

(二)可讀取確認(read committed)

寫事務會阻止其他讀寫事務。讀事務不會阻止其他任何事務。

存在的問題:不可重複讀。即在一次事務之間,進行了兩次讀取,但是結果不一樣,可能第一次id為1的人叫「李三」,第二次讀id為1的人就叫了「李四」。因為讀取操作不會阻止其他事務。

解決辦法就是下面的「可重複讀」。

(三)可重複讀(repeatable read)

讀事務會阻止其他寫事務,但是不會阻止其他讀事務。

存在的問題:幻讀。可重複讀阻止的寫事務包括update和delete(只給存在的表加上了鎖),但是不包括insert(新行不存在,所以沒有辦法加鎖),所以乙個事務第一次讀取可能讀取到了10條記錄,但是第二次可能讀取到11條,這就是幻讀。

解決辦法就是下面的「序列化」。

(四)可序列化(serializable)

讀加共享鎖,寫加排他鎖。這樣讀取事務可以併發,但是讀寫,寫寫事務之間都是互斥的,基本上就是乙個個執行事務,所以叫序列化。

源自:

資料庫四種隔離級別

存在的問題 更新遺失。解決辦法就是下面的 可讀取未確認 寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。存在的問題 髒讀。即讀取到不正確的資料,因為另乙個事務可能還沒提交最終資料,這個讀事務就讀取了中途的資料,這個資料可能是不正確的。解決辦法就是下面的 可讀取確認 寫事務會阻止其他讀寫...

資料庫事務四種隔離級別

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

資料庫的四種隔離級別

序列化 serializable,sqlite預設模式 最高端別的隔離。兩個同時發生的事務100 隔離,每個事務有自己的 世界 可重複讀 repeatable read,mysql預設模式 每個事務有自己的 世界 除了一種情況。如果乙個事務成功執行並且新增了新資料,這些資料對其他正在執行的事務是可見...