Mysql的事务事务的特征事务的隔离级别
生活随笔
收集整理的這篇文章主要介紹了
Mysql的事务事务的特征事务的隔离级别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 事務
- 事務的(ACID)特征
- 事務的隔離級別
事務
事務的概念:
事務(Transaction)是數據庫區別于文件系統的重要特性之一,事務就是用戶定義的一系列執行SQL語句的操作, 這些操作要么完全地執行,要么完全地都不執行, 它是一個不可分割的工作執行單元。
事務的使用場景:
在日常生活中,有時我們需要進行銀行轉賬,這個銀行轉賬操作背后就是需要執行多個SQL語句,假如這些SQL執行到一半突然停電了,那么就會導致這個功能只完成了一半,這種情況是不允許出現,要想解決這個問題就需要通過事務來完成。
事務的(ACID)特征
原子性(Atomicity):
整個事務的所有操作要么全部提交成功,要么全部失敗回滾(不會出現部分執行的情況)。
一致性(Consistency):
幾個并行執行的事務,其執行結果必須與按某一順序串行執行的結果相一致。
隔離性(Isolation):
事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的。(和事務的隔離級別有關聯)
持久性(Durability):
一個事務一旦被提交了,那么對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作
事務的隔離級別
未提交讀: 臟讀(READ UNCOMMITTED)
- 讀取到其他事務還未提交的數據
- 例:初始count=100,B事務把count修改為101,但是還沒有commit提交到數據庫,可能由于回滾并沒有真正保存到數據庫,但是A事務此時就讀取到了101
提交讀: 不可重復讀(READ COMMITTED)
- 同一個事務兩次讀取到的數據時其他事務提交前后的,所以讀取數據不一樣
- 例:A先讀取到數據count=100,但是B事物把count修改成了101,A這個事物還沒有完成,在此讀取時發現同一個事物兩次。 讀取的數據不一樣
可重復讀: 幻讀(REPEATABLE READ)
這是MySQL的默認事務隔離級別
- 在讀取數據時加一個版本號,如果其他事務修改了這個數據,我還是會讀取我以前讀取那個版本的數據,不會管他修改后的數據
- 但并不能阻止另一個事務插入新的數據行,這就會導致該事務中憑空多出數據行,像出現了幻讀一樣,這便是幻讀問題
- 例:A事務讀取count=100后加了一個版本號,如果后續B事務將 count修改成了101,A事務不會讀取最新版本的101,而是讀取自己最初讀取的那個版本100
可串行讀(SERIALIZABLE)
- 這是事務的最高隔離級別,通過強制事務排序,使之不可能相互沖突,就是在每個讀的數據行加上共享鎖來實現
- 在該隔離級別下,可以解決前面出現的臟讀、不可重復讀和幻讀問題,但也會導致大量的超時和鎖競爭現象,一般不推薦使用。
總結
以上是生活随笔為你收集整理的Mysql的事务事务的特征事务的隔离级别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql数据库五大常用数据引擎
- 下一篇: MySQL的主从复制主从同步