mysql的事務,隔離級別和鎖
阿新 • • 發佈:2018-12-26
事務就是一組一起成功或一起失敗的sql語句。事務還應該具備,原子性,一致性,隔離性和永續性。
一、事務的基本要素 (ACID)
1、原子性:事務開始後,所有的操作,要麼全部成功,要麼全部失敗,不可能處於中間狀態,事務是一個不可分割的整體,就像原子一樣。
2、一致性:事務開始前和結束後,資料庫的完整性約束沒有破壞,A向B轉賬,A扣了錢,但B卻沒到賬。
3、隔離性:同時發生的事務(併發事務)不應該導致資料庫處於不一致的狀態中,每個事務都獨立執行,不影響其他事務的存在。
4、永續性:事務對資料庫的更改都會儲存在磁碟上,不會丟失。
二、事務的併發問題
1、髒讀:事務A讀取了事務B未提交的寫入資料,讀取到的資料就稱為髒資料
2、不可重複讀:事務A多次讀取同一資料,但在讀取過程中,事務B對資料做了修改,並提交了。導致多次讀取同一資料,結果不一樣。
3、幻讀:事務A對錶中所有資料行進行了修改,比如設定status = 1,但同時,事務B往該表插入了一行新資料status = 0,對於操作事務A的使用者而言,表中還有一條記錄沒被修改,就像發生幻覺一樣。
三、事務隔離性的四個級別
事務隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
讀取未提交 read uncommitted | √ |
√ |
√ |
讀已提交 read committed | × |
√ |
√ |
可重複讀取 repeatable read | × |
× |
√ |
序列化 serializable | × |
× |
× |