SQL--事務

自由的心|勇敢的心發表於2024-10-05

事務 INNODB

銀行作業系統 使用者A ==> 使用者B

一個整體 事務 而言 要麼全部執行成功 要麼全部執行失敗

begin; 開啟事務,新增動作
rollback; #回滾
commit; # 提交

事務:
1、原子性(Atomicity):事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。

2、一致性(Consistency):幾個並行執行的事務,其執行結果必須與按某一順序 序列執行的結果相一致。
拿轉賬來說,假設使用者A和使用者B兩者的錢加起來一共是5000,那麼不管A和B之間如何轉賬,轉幾次賬,
事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。

3、隔離性(Isolation):事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的。
對於任意兩個併發的事務T1和T2,在事務T1看來,T2要麼在T1開始之前就已經結束,要麼在T1結束之後才開始,
這樣每個事務都感覺不到有其他事務在併發地執行

4、永續性(Durability):對於任意已提交事務,系統必須保證該事務對資料庫的改變不被丟失,即使資料庫出現故障。

事務隔離級別
事務的問題 :
髒讀 一個事務讀到另外一個事務還沒有提交的資料 事務A進行修改操作,事務B進行查詢操作 事務B查詢到了事務A未提交的資料

不可重複讀 一個事務讀取同一條資料,查詢出兩次不同的結果
事務A查詢操作 101 事務B 101 進行修改(提交了) ,但是事務A又進行了一次查詢101,發現兩次查詢資料不同

幻讀: 事務A查詢資料108的時候 發現這個資料在表中不存在, 事務B 咋做108的新增,進行了事務提交,事務A做108的新增,報錯,
但是事務A查詢的時候 ,這個108的資料又沒有

檢視事務隔離級別

SELECT @@transaction_isolation;

設定事務隔離級別 session 當此會話 global 全域性

set session transaction isolation level Read Uncommitted
set session transaction isolation level Read Committed
set session transaction isolation level Repeatable Read (預設)
set session transaction isolation level Serializable

4個隔離許可權,許可權等級越高,安全性越高 效率越低
髒讀 不可重複讀 幻讀

Read Uncommitted 出現 出現 出現

Read Committed 不會 出現 出現

Repeatable Read 不會 不會 出現

Serializable 不會 不會 不會

相關文章