歡迎來到DIVCSS5查找CSS資料與學習DIV CSS布局技術!
數據庫事務
 
事務是什么
 
是數據庫操作的最小工作單元,是作為單個邏輯工作單元執行的一系列操作;這些操作作為一個整體一起向系統提交,要么都執行、要么都不執行;事務是一組不可再分割的操作集合。
 
事務的四大特性
 
原子性
 
事務是數據庫的邏輯工作單位,事務中包含的各操作要么都做,要么都不做
 
一致性
 
事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。
 
隔離性
 
一個事務的執行不能被其它事務干擾。即一個事務內部的操作及使用的數據對其它并發事務是隔離的,并發執行的各個事務之間不能互相干擾。
 
持續性
 
也稱永久性,指一個事務一旦提交,它對數據庫中的數據的改變就是永久性的。接下來的其它操作或故障不應該對其執行結果有任何影響。
 
MySQL事務隔離級別
 
隔離級別 隔離級別的值 導致的問題
 
Read-Uncommitted 0 導致臟讀
 
Read-Committed 1 避免臟讀,允許不可重復讀和幻讀
 
Repeatable-Read 2 MySQL默認的隔離級別。避免臟讀,不可重復讀,允許幻讀
 
Serializable 3 串行化讀,事務只能一個一個執行,避免了 臟讀、不可重復讀、幻讀。執行效率慢,使用時慎重
 
1. 臟讀
 
一個事務對數據進行了增刪改查,但是未提交事務。另一個事物可以讀取到未提交的數據,如果第一個事務進行了回滾,那么第二個事務就讀到了臟數據。
 
例子:
 
領導給張三發工資,10000元已打到張三賬戶,但該事務還未提交,正好這時候張三去查詢工資,發現10000元已到賬。這時領導發現張三工資算多了5000元,于是回滾了事務,修改了金額后將事務提交。最后張三實際到賬的只有5000元。
 
2. 不可重復度
 
一次事務發生了兩次讀操作,兩個讀操作之間發生了另一個事務對數據修改操作,這時候第一次和第二次讀到的數據不一致。
 
不可重復度關注點在數據更新和刪除,通過行級鎖可以實現可重復讀的隔離級別。
 
例子:
 
張三需要轉正1000元,系統讀到卡余額有2000元,此時張三老婆正好需要轉正2000元,并且在張三提交事務前把2000元轉走了,當張三提交轉賬是系統提示余額不足。
 
3. 幻讀
 
幻讀,指的是當某個事務在讀取某個范圍內的記錄時,另外一個事務又在該范圍內插入了新的記錄,當之前的事務再次讀取該范圍的記錄時,會產生幻行。
 
相對于不可重復讀,幻讀更關注其它事務的新增數據。通過行級鎖可以避免不可重復讀,但無法解決幻讀的問題,想要解決幻讀,只能通過Serializable隔離級別來實現。
 
例子:
 
張三老婆準備打印張三這個月的信用卡消費記錄,經查詢發現消費了兩次共1000元,而這時張三剛按摩完準備結賬,消費了1000元,這時銀行記錄新增了一條1000元的消費記錄。當張三老婆將消費記錄打印出來時,發現總額變為了2000元,這讓張三老婆很詫異。
 
4. 串行化讀
 
Serializable是最高的隔離級別,性能很低,一般很少用。在這級別下,事務是串行順序執行的,不僅避免了臟讀、不可重復讀,還避免了幻讀。

如需轉載,請注明文章出處和來源網址:http://www.rs2pl.com/html/h65262.shtml

久久天天躁狠狠躁夜夜躁2020