標簽:放棄 導致 tom 服務器 分割 限制 ack 成功 結束
事務(Transaction)是由一系列對系統中數據進?訪問與更新的操作所組成的?個程序執行邏輯單元。 (1) 事務的 語法 (2) 事務的特性 (3) 事務并發問題 (4) 事務隔離級別 (5) 不同隔離級別的鎖的情況(了解) (6) 隱式提交(了解)
原?性(Atomicity) 事務的原?性是指事務必須是?個原子的操作序列單元。事務中包含的各項操作在?次執?過程中,只 允許出現兩種狀態之一。 (1)全部執行成功 (2)全部執行失敗 事務開始后所有操作,要么全部做完,要么全部不做,不可能停滯在中間環節。事務執?過程中出錯, 會回滾到事務開始前的狀態,所有的操作就像沒有發?一樣。也就是說事務是?個不可分割的整體,就 像化學中學過的原子,是物質構成的基本單位。
?致性(Consistency) 事務的一致性是指事務的執?不能破壞數據庫數據的完整性和一致性,一個事務在執?之前和執行之后,數據庫都必須處以?致性狀態。 比如:如果從A賬戶轉賬到B賬戶,不可能因為A賬戶扣了錢,?B賬戶沒有加錢。
隔離性(Isolation) 事務的隔離性是指在并發環境中,并發的事務是互相隔離的。也就是說,不同的事務并發操作相同的數 據時,每個事務都有各自完整的數據空間。 ?個事務內部的操作及使用的數據對其它并發事務是隔離的,并發執行的各個事務是不能互相干擾的。 隔離性分4個級別,下面會介紹。
持久性(Duration) 事務的持久性是指事務?旦提交后,數據庫中的數據必須被永久的保存下來。即使服務器系統崩潰或服 務器宕機等故障。只要數據庫重新啟動,那么一定能夠將其恢復到事務成功結束后的狀態
臟讀:讀取到了沒有提交的數據, 事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的 數據是臟數據。
不可重復讀:同?條命令返回不同的結果集(更新).事務 A 多次讀取同一數據,事務 B 在事務A 多次讀取的 過程中,對數據做了更新并提交,導致事務A多次讀取同一數據時,結果不一致。
幻讀:重復查詢的過程中,數據 就發?了量的變化(insert, delete)。
4種事務隔離級別從上往下,級別越高,并發性越差,安全性就越來越高。 ?般數據默認級別是 讀以提交或可重復讀
查看當前會話中事務的隔離級別
select @@transaction_isolation;
mysql8以后
select @@tx_isolation;
mysql8以前
讀未提交(READ_UNCOMMITTED)
讀未提交,該隔離級別允許臟讀取,其隔離級別是最低的。換句話說,如果一個事務正在處理理某一數 據,并對其進?了更新,但同時尚未完成事務,因此還沒有提交事務;而以此同時,允許另一個事務也 能夠訪問該數據。 臟讀示例:
在事務A和事務B同時執行時可能會出現如下場景:
余額應該為1500元才對。請看T5時間點,事務A此時查詢的余額為0,這個數據就是臟數據,他是事務B 造成的很明顯是事務沒有進行隔離造成的。
讀已提交(READ_COMMITTED)
讀已提交是不同的事務執行的時候只能獲取到已經提交的數據。 這樣就不會出現上面的臟讀的情況了。 但是在同一個事務中執行同一個讀取,結果不一致 不可重復讀示例 可是解決了臟讀問題,但是還是解決不了可重復讀問題。
事務A其實除了了查詢兩次以外,其它什什么事情都沒做,結果錢就從1000變成0了了,這就是不不可重復讀的問題。
可重復讀(REPEATABLE_READ)
可重復讀就是保證在事務處理理過程中,多次讀取同一個數據時,該數據的值和事務開始時刻是一致的。 因此該事務級別限制了不可重復讀和臟讀,但是有可能出現幻讀的數據。 幻讀幻讀就是指同樣的事務操作,在前后兩個時間段內執行對同一個數據項的讀取,可能出現不一致的結果。 詭異的更新事件
順序讀(SERIALIZABLE)
順序讀是最嚴格的事務隔離級別。它要求所有的事務排隊順序執?行行,即事務只能一個接一個地處理,不 能并發。
標簽:放棄 導致 tom 服務器 分割 限制 ack 成功 結束
原文地址:https://www.cnblogs.com/circle-coder/p/15072988.html