髒讀、幻讀和不可重複讀?為啥?
前言:
一致性是指在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。這是說資料庫事務不能破壞關係資料的完整性以及業務邏輯上的一致性。
例子: 對銀行轉帳事務,不管事務成功還是失敗,應該保證事務結束後ACCOUNT表中A和B的存款總額為x元不變。
Isolation 隔離性:
資料庫允許多個併發事務同事對資料進行操作,隔離性保證各個事務相互獨立,事務處理時的中間狀態對其它事務是不可見的,以此防止出現資料不一致狀態。
例子: 在Windows中,如果多個程式對同一個檔案進行修改是不允許的,Windows透過這種方式來保證不同程式的隔離性。
Durable 永續性:
一個事務處理結束後,其對資料庫的修改就是永久性的,即使系統故障也不會丟失。
髒讀、幻讀和不可重複讀的概念
髒讀:
所謂髒讀是指一個事務中訪問到了另外一個事務未提交的資料,如下圖:
如果會話 2 更新 age 為 10,但是在 commit 之前,會話 1 希望得到 age,那麼會獲得的值就是更新前的值。或者如果會話 2 更新了值但是執行了 rollback,而會話 1 拿到的仍是 10。這就是髒讀。
不可重複讀:
一個事務查詢同一條記錄2次,得到的結果不一致:
由於在讀取中間變更了資料,所以會話 1 事務查詢期間的得到的結果就不一樣了。
幻讀:
一個事務查詢2次,得到的記錄條數不一致:
幻讀是不可重複讀的一種特殊場景。
MySQL 資料隔離級別
MySQL 裡有四個隔離級別:
Read uncommttied(可以讀取未提交資料)
Read committed(可以讀取已提交資料)
Repeatable read(可重複讀)
Serializable(可序列化)。
不同事務隔離級別有不同的效果:
在 InnoDB 中,預設為 Repeatable 級別,InnoDB 中使用一種被稱為 next-key locking 的策略來避免幻讀(phantom)現象的產生。
隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。
獲取資料:
本次給大家分享一些學習資料,裡面包括:(高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)以及Java進階學習路線圖。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545684/viewspace-2654204/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 髒讀、幻讀和不可重複讀
- 髒讀,幻讀,不可重複讀
- 什麼是髒讀,不可重複讀,幻讀
- 一文詳解髒讀、不可重複讀、幻讀
- 【Mysql】資料庫事務,髒讀、幻讀、不可重複讀MySql資料庫
- MySQL 事務隔離實驗-認識:髒讀、不可重複讀、幻讀MySql
- 資料庫事務隔離級別– 髒讀、幻讀、不可重複讀資料庫
- 髒讀!幻讀!不可重複讀!mysql併發事務引發的問題MySql
- 事務四大特性理解,什麼是髒資料、髒讀、不可重複讀、幻覺讀
- 簡單聊聊mysql的髒讀、不可重複讀MySql
- 三分鐘掌握ACID、髒讀、幻讀、不可重複讀、事務隔離級別
- 關於事務、事務的隔離級別以及對髒讀、不可重複讀、幻讀的理解
- MySQL事務(4種事務隔離級別、髒寫、髒讀、不可重複讀、幻讀、當前讀、快照讀、MVCC、事務指標監控)MySqlMVC指標
- Mysql RC/RR隔離原理和區別 不可重複讀和可重複讀MySql
- MySQL的可重複讀級別能解決幻讀嗎MySql
- 【每日鮮蘑】資料庫隔離級別、髒讀、幻讀、鎖等資料庫
- EXCEL不可讀怎麼辦,修復EXCEL檔案不可讀Excel
- MySQL 之隔離級別:可重複讀MySql
- Phantom Problem(幻讀)問題
- Mysql可重複讀(1) —— 快照何時建立MySql
- 英語拼讀發音規則:連讀、略讀、重讀、斷句、語調
- 為什麼mysql選可重複讀作為預設的隔離級別MySql
- InnoDB 是如何解決幻讀的
- MySQL rr下幻讀問題分析MySql
- MySQL實驗: 實踐索引對全列匹配、最左字首匹配、範圍查詢等條件的影響以及瞭解髒讀、幻讀等MySql索引
- [Mysql]主從複製和讀寫分離MySql
- 什麼是鎖?深入分析解讀MySQL鎖,解決幻讀問題!MySql
- 解決 HttpServletRequest 的輸入流不能重複讀的問題HTTPServlet
- MySQL 實戰 | 08 懵逼,可重複讀好像失效了?MySql
- HDFS讀寫流程(重點)
- 《重構》讀書筆記筆記
- 重讀redux原始碼(一)Redux原始碼
- 【讀程式碼重構有感】
- 答讀者問:關於隱式 id 重複的問題
- Pythonopen讀和寫Python
- 為什麼讀書?
- MySQL是怎麼解決幻讀問題的?MySql
- java讀取excel為物件並進行讀寫操作JavaExcel物件