原子性(atomicity):事務是乙個不可分割的單位。事務中的操作,要麼全部做完,要麼全部不做。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。
一致性(consistency):事務開始前和結束後,資料庫的完整性約束沒有被破壞 。必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態。比如a向b轉賬,不可能a扣了錢,b卻沒收到。
隔離性(isolation):同一時間,只允許乙個事務請求同一資料,不同的事務之間彼此沒有任何干擾。乙個事務的執行不能被其他事務干擾。
永續性(durability):事務一旦被提交,事務對資料庫的所有更新將被儲存到資料庫,不能回滾。
髒讀:a讀到了b更新但未提交的資料,然後b回滾操作,那麼a讀到的資料是髒資料。
不可重複讀: a 多次讀取同一資料, b在a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時結果不一致。
幻讀:a 多次讀取同一資料, b在a多次讀取的過程中,對資料作了插入並提交,導致事務a多次讀取同一資料時發現還有多了幾條資料,就好像發生了幻覺一樣,這就叫幻讀。
小結:不可重複讀和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表。
事務隔離級別
髒讀不可重複讀
幻讀mysql
orcale
讀未提交(read-uncommitted)
不能解決
不能解決
不能解決
√讀已提交(read-committed)
能解決不能解決
不能解決
√√預設
可重複讀(repeatable-read)
能解決能解決
不能解決
√預設序列化(serializable)
能解決能解決
能解決√√
補充:事務隔離級別為讀已提交時,寫資料只會鎖住相應的行
事務隔離級別為可重複讀時,如果檢索條件有索引的時候,預設加鎖方式是next-key 鎖;如果檢索條件沒有索引,更新資料時會鎖住整張表。乙個間隙被事務加了鎖,其他事務是不能在這個間隙插入記錄的,這樣可以防止幻讀。
事務隔離級別為序列化時,讀寫資料都會鎖住整張表
隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。
參考:
MySQL 四種事務隔離級別
mysql 事務都是指在 innodb 引擎下,myisam 引擎不支援事務。顯而易見,能夠讀取到,其他事務未提交的資料。既然其他事務未提交,就代表資料可能會回滾,這也意味著,可能讀取到的資料根本就不存在。特點 能讀取其它事務未提交的資料。存在事務問題 髒讀,不可重複讀,幻讀 這個隔離級別,只能讀取...
MySQL的四種事務隔離級別
一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...
mysql的四種事務隔離級別
一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...