mysql 交易隔離等級

來源:互聯網
上載者:User

標籤:

read-uncommitted(未提交讀)
測試流程:
1、A設定read-uncommitted, start transaction
2、B執行start transaction,修改一條記錄,
3、A查詢記錄,得到了以為正確的記錄
4、B復原。
問題:A讀到了B沒有提交的記錄,也就是髒讀。

 read-committed(已提交讀)

測試流程:
1、A設定read-committed, start transaction
2、B執行start transaction,修改一條記錄,查詢記錄,記錄已經修改成功
3、A查詢記錄,結果還是老的記錄
4、B提交事務
5、A重新查詢記錄,結果是新的記錄。
問題:解決了髒讀的問題,但是出現一個新問題,A在一個事務中,兩次讀取的記錄不一致,也就是不可重複讀取。

repeatable-read(可重複讀)
測試流程:
1、A設定repeatable-read, start transaction,查詢記錄,結果是老的記錄
2、B執行start transaction,修改一條記錄,查詢記錄,記錄已經修改成功
3、A查詢記錄,結果還是老的記錄
4、B提交事務
5、A重新查詢記錄,結果還是老的記錄。
問題:可以重複讀,A在事務過程中,即使B修改了資料,並且commit,A讀取的還是老的資料。
注意:這裡可能會存在一個新的問題,A在事務過程中,B增加一條記錄,並提交,導致A的兩次讀取不一致,會多一條記錄,也就是幻影讀。這裡只是可能,具體取決於資料庫的實現。mysql的repeatable-read實現,不會導致幻影讀。

serializable(可序列化)
測試流程:
1、A設定serializable, start transaction,查詢記錄,結果是老的記錄
2、B執行start transaction,修改一條記錄,B卡在這裡,要等待A完成才行。
3、A查詢記錄,結果還是老的記錄,A提交。
4、B的修改操作才進行下去。
注意:B在等待過程中,會出現lock逾時。這種情況,存在效能問題,因為要一個一個來。

 

mysql 交易隔離等級

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.