資料庫四大特性以及事務的隔離級别
- 四大特性
-
- 1.原子性
- 2.一緻性
- 3.隔離性
- 4.持久性
- 事務的隔離級别
-
- 1.read-uncommitted(讀未送出)
- 2.read-committed(已送出讀)
- 3.repeatable-read(可重複讀)
- 4.serializable(串行化)
- 參考文獻
四大特性
1.原子性
指事務的操作要麼全部成功,要麼全部失敗復原
2.一緻性
指事務執行前後都必須處于一緻的狀态,中間的操作過程對使用者不可見。
如比如張三取100給李四,資料庫操作為張三先減100,然後李四的錢加100。當使用者看到的是這兩個過程是一起執行不可分離的。
3.隔離性
多使用者可以同時通路同一個庫同一個表,且不同使用者的事務不會互相幹擾。
4.持久性
一個事務一旦被送出,那麼資料庫的資料就永久的改變了。即使發生故障時事務也依然不會丢失。
事務的隔離級别
首先先了解三個概念:
1.髒讀:事務a讀取了事務b更新的資料,然後b復原資料導緻a讀取到的資料實際上并不存在于資料庫中,a讀取到了髒資料。
2.不可重複讀:事務a多次讀取某個資料時,事務b在中途中修改了資料的值,導緻a多次讀取資料的結果不一緻。
3.幻讀:事務a先查詢到資料不存在後,進行插入操作,這時事務b先行插入了資料,導緻事務a插入操作失敗。事務a在插入前已經查詢過資料明确顯示不存在了,當插入時卻又提示資料已存在,就像出現了bug一樣。(可以通過加共享鎖解決)
隔離級别分為了4個,越來越高排序
級别越高,越能保證資料的完整性和一緻性,同時性能也會越低
1.read-uncommitted(讀未送出)
事務還沒送出時,其他事務就可以讀取到資料。
會出現髒讀、不可重讀、幻讀等現象。
2.read-committed(已送出讀)
事務在送出之後才能讀取到資料
會鎖住相應的行,會出現不可重複讀、幻讀
3.repeatable-read(可重複讀)
在以送出讀的基礎上解決不可重複讀。
但仍然存在幻讀現象。是mysql的預設級别。
沒有索引時,更新資料會鎖定整個表。存在索引包括主鍵索引,會使用next-key鎖。
4.serializable(串行化)
解決了所有問題,但是操作時會鎖住整個表,是以使用率極低。
本人小白學習記錄用,歡迎留言互相學習交流。2018年12月28日
參考文獻
MySQL的四種事務隔離級别
MySQL事務一緻性了解