mysql的InnoDB引擎支持事務,那麼事務之間也有可見性的問題,當我們開啓事務-提交事務的時候,我們想保證ACID屬性,
A 原子性
C 一致性
I 隔離性
D 持久性
隔離性的主要指標就是隔離級別,即事務之間的可見性的管控
隔離級別的分類
1-讀未提交:A事務可以讀取B事務未提交的變更,如B set a=3;A: read a,a=3;
2-讀提交: A事務可以讀取B事務已經提交的變更
3-可重複讀 :A事務完成之前,讀取的數據不會因爲B事務的提交而變化
4-串行化:A事務執行完才能執行B事務,
上面的隔離級別的實現原理是什麼呢?
答案是-數據庫視圖-View。在數據庫中,如果在隔離級別是2-讀提交/3-可重複讀的情況下,在事務開始執行的時候,數據庫會創建數據的視圖,類似數據的副本。
2-讀提交的時候,多個線程的視圖是同一個,即commit的事物都會被所有事務同時讀到
3-可重複讀的時候,每個事務有自己單獨的視圖,不會因爲其他事務的提交而變化,所以不會讀到其他事務的變更。
1-讀未提交的隔離級別不會創建視圖。
4-串行隔離級別也不會創建視圖。