?🎄事務的四大特性
- 以下就是事務的四大特性,簡稱ACID。
- 原子性📢事務時不可分割的最小操作單元,要么全部成功,要么全部失敗。
- 一致性📢事務完成后,必須使所有的數據都保持一致
- 隔離性📢數據庫系統自身提供的隔離機制,保證事務在不受外部并發操作影響的獨立
環境下運行。- 持久性📢事務一旦提交或回滾,它對數據庫中的數據的改變就是永久的。(將在磁盤中永久寫入)。
🎄并發事務引發的問題
?臟讀
- 一個事務讀到另外一個事務還沒有提交的數據。
A事務更新了某個字段的值,比如將100更新為200,但此時A事務還沒有提交
此時B事務讀取這個字段發現還是100,也就是B事務讀取到了A事務還沒有來得及處理的數據
?不可重復讀
-
一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀。
- A事務的第一條查詢語句查詢后,此時B事務進行的對同一字段記錄的更新
- 緊接著A事務的再次對同一數據進行查詢時發現數據不一致。
- 這就是不可重復讀,也就是重復讀的數據不一致。
?幻讀
- 一個事務按照條件查詢數據時,沒有匹配到對應的數據,但是在插入數據時,發現這行數據又存在了。就好像出現了“幻影”。
A事務查詢主鍵1不存在,此時B事務插入了一條主鍵為1的數據,緊接著A事務又去插入主鍵為1的記錄,此時發現數據已經存在,插入失敗。就好像出現了幻覺。
🎄事務的隔離級別
📢目的就是為了解決并發事務所引發的問題。
隔離級別 | 臟讀 | 不可重復讀 | 幻讀 |
---|---|---|---|
Read uncommitted | 未解決 | 未解決 | 未解決 |
Read committed | 解決 | 未解決 | 未解決 |
Repeatable Read( 默認 ):可重復讀 | 解決 | 解決 | 未解決 |
Serializable(串行化) | 解決 | 解決 | 解決 |
?查看事務隔離級別
select @@transaction_isolation
?設置事務隔離級別
set [session|global] transaction isolation level [read uncommitted | read committed | repeatable read | serializable]
?注意
📢:對于隔離級別越高數據越安全,但是并發性能越差。