天天看點

資料庫四大特性以及事務的隔離級别四大特性事務的隔離級别參考文獻

資料庫四大特性以及事務的隔離級别

  • 四大特性
    • 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事務一緻性了解

繼續閱讀