03_事務隔離
事務隔離
事務需要保證一組資料庫操作,要么全部成功,要么全部失敗;
MySQL事務隔離性是保證資料一致性和并發控制的重要手段之一,它對于多個事務同時訪問和修改同一資料的情況下,能夠保證事務之間的獨立性和隔離性,避免資料的不一致和沖突,
ACID是MySQL事務的四個特性,其中隔離性是指多個并發事務之間相互隔離,互不干擾,每個事務僅能看到自己的修改,而不能看到其他事務的修改,
- ACID概念最早由IBM的研究員在20世紀80年代提出,主要是為了解決資料庫并發控制和資料一致性的問題,并逐漸成為了資料庫事務的標準特性,
- ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔離性、持久性)
?
隔離級別
MySQL中有四種隔離級別,包括讀未提交、讀提交、可重復讀和串行化,
- 讀未提交(read uncommitted)
- 讀提交(read committed)
- 可重復讀(repeatable read)、
- 串行化(serializable )
其中,讀未提交是最低的隔離級別,它允許一個事務讀取另一個事務未提交的資料,可能會出現臟讀、不可重復讀和幻讀的問題,
讀提交是一個事務提交后才能被其他事務看到,避免了臟讀的問題,但可能會出現不可重復讀和幻讀的問題,
可重復讀是MySQL默認的隔離級別,它保證了在一個事務執行期間,讀取的資料是一致的,不會出現臟讀、不可重復讀和幻讀的問題,
串行化是最高的隔離級別,它通過加鎖的方式保證了事務的串行執行,避免了所有并發問題,但會導致性能問題,
?
?
事務隔離的實作
MySQL的事務隔離性是通過多版本并發控制(MVCC)來實作的,它通過為每個事務創建一個獨立的視圖來保證事務之間的隔離性,
- 在可重復讀隔離級別下,視圖是在事務啟動時創建的,整個事務存在期間都使用這個視圖,
- 在讀提交隔離級別下,視圖是在每個SQL陳述句開始執行時創建的,
- 而在讀未提交隔離級別下直接回傳記錄上的最新值,沒有視圖概念,
- 在串行化隔離級別下,直接用加鎖的方式來避免并發訪問,
同時,MySQL在實作MVCC時,每條記錄在更新時都會同時記錄一潭訓滾操作,同一條記錄在系統中可以存在多個版本,回滾日志會在不需要的時候被洗掉,
最后,需要注意的是,長事務會導致系統里面存在很老的事務視圖,這些事務可能會訪問資料庫里面的任何資料,導致大量占用存盤空間,因此建議盡量避免使用長事務,
?
默認隔離級別
Oracle 資料庫的默認隔離級別其實是:讀提交;
MySQL 資料庫的默認隔離級別是:可重復讀,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554197.html
標籤:MySQL
上一篇:02_重要的兩個日志 redo log 和 binlog
下一篇:返回列表
