我們知道,當多個執行緒都開啟事務運算元據庫中的資料時,資料庫系統要能進行隔離操作以保證各個執行緒獲取資料的準確性。也就是說,事務的隔離性主要用於解決事務的併發安全問題
事務隔離級別
髒讀不可重複讀
幻讀讀未提交(read-uncommitted)是是
是不可重複讀(read-committed)否是
是可重複讀(repeatable-read)否否
是序列化(serializable)否否
否mysql的預設隔離界別:可重複讀
sql語句:select @@tx_isolation檢視當前資料庫隔離界別
其中可重複讀是通過mvcc來實現的又叫快照讀,在事務中的讀操作通過對當前的資料庫中記錄乙個版本,以後的讀操作只會讀取記錄的版本,因此相當於對資料庫的資料建立了乙個快照資料,因此叫做快照讀,其不用對資料庫中的資料進行加鎖又叫做樂觀鎖。
當mysql在可重複讀隔離界別下:
事務1更新某一行資料時事務2不能更新這一條記錄,mysql會為這條資料加入寫鎖,(這一條記錄包括同時更新某一行資料,或者同時插入某一行資料要求這行資料主鍵一樣,如果事務1插入主鍵5,事務2插入主鍵8,則不會等待,如果同時插入主鍵5,會等待),等待,必須事務1commit之後才可以更新,如果同時更新的是不同行的資料,則不影響,都可以更新。但是如果兩個事務都沒有commit,那麼都看不到各自的修改。即使有乙個事務commit,另乙個事務也看不到,除非也commit。
mysql對資料加鎖不管共享鎖還是互斥鎖就能解決幻讀的問題
同時rr事務級別的mysql通當前讀和gap鎖來解決幻讀,其本質是通過對資料庫周邊記錄進行加悲觀鎖(讀鎖(共享鎖)和互斥鎖(寫鎖))【gap鎖】來解決幻讀。
加入共享鎖排(讀鎖)
在事務裡面寫入語句select * from money lock in share mode;
開啟共享鎖,其他事務也能開啟共享鎖,但是此事務和其他事物只能讀不能增刪改資料,直到此事務或者其他事物comiit之後另乙個事務才能增刪改資料。
2.加入互斥鎖(寫鎖)
在事務裡面寫入語句select * from money for update;
開啟互斥鎖,其他事務不能獲得互斥鎖,但是其他事物可以讀,不可以寫入人任何內容,直到此事務commit,
事務併發 併發控制(加鎖)
事務處理中的併發控制 1.併發操作 資料庫是乙個共享資源,允許多個使用者程式並行地訪問資料庫,所以當多個使用者併發地訪問同一資料,就可能出現資料的不一致性。例如 假設有兩個事務 t1 和 t2 它們都需要讀出並修改資料 a 其執 況如下所示 執行順序 1 2 3 4 5 6 事務t1 讀aa a 1...
事務的併發控制(1)
每個時刻只有乙個事務執行,其他事務必須等到這個事務結束後才執行,當多個使用者併發訪問資料庫時就會產生多個事務同時訪問同一資料的情況。事務時併發控制的基本單位。事務併發操作帶來的資料不一致性包括 丟失資料,不可重複讀結果,讀取髒資料。1 丟失資料 lost update 兩個事務讀入同一資料並修改,t...
事務併發控制(一)
1 事務的概念 事務是使用者定義的一組資料庫操作序列。事務具有acid特性 原子性 atomicity 一致性 consistency 隔離性 isolation 和持續性 durability 原子性指 事務包含的所有操作要麼全部被執行,要麼都不執行 一致性指 事務的執行結果必須使資料庫從乙個一致...