資料庫進階——事務
阿新 • • 發佈:2021-07-05
一:事務概念
1.事務(Transaction)是由一系列對系統中資料進⾏訪問與更新的操作所組成的⼀個程式執行邏輯單元。(比如sqlyog menven 控制檯等,執行時都是一個事務)
2.本章學習路徑:(1) 事務的語法
(2) 事務的特性
(3) 事務併發問題
(4) 事務隔離級別
(5) 不同隔離級別的鎖的情況(瞭解)
(6) 隱式提交(瞭解)
二:事務語法
1. start transaction; begin; 開始事務 2. commit; 提交事務(使得當前的修改確認) 3. rollback; 回滾(使得當前的修改被放棄)三:事務的ACID特性
四:事務併發問題
五:事務隔離等級
(4種事務隔離級別從上往下,級別越高,併發性越差,安全性就越來越高。 ⼀般資料預設級別是 讀以提交或可重複讀) 1.檢視當前會話中事務的隔離級別:select @@transaction_isolation 2.設定當前會話中的事務隔離級別 : set session transaction isolation level read uncommitted; 3.1) 讀未提交(READ_UNCOMMITTED) 讀未提交,該隔離級別允許髒讀取,其隔離級別是最低的。換句話說,如果一個事務正在處理理某一資料,並對其進⾏了更新,但同時尚未完成事務,因此還沒有 提交事務;而以此同時,允許另一個事務也能夠訪問該資料. 3.2)讀已提交(READ_COMMITTED)讀已提交是不同的事務執行的時候只能獲取到已經提交的資料。 這樣就不會出現上面的髒讀的情況了。但是在同一個事務中執 行同一個讀取,結果不一致不可重複讀示例,可是解決了髒讀問題,但是還是解決不了可重複讀問題。 3.3)可重複讀(REPEATABLE_READ)可重複讀就是保證在事務處理理過程中,多次讀取同一個資料時,該資料的值和事務開始時刻是一致的。因此該事務級別限制 了不可重複讀和髒讀,但是有可能出現幻讀的資料。幻讀幻讀就是指同樣的事務操作,在前後兩個時間段內執行對同一個資料項的讀取,可能出現不一致的結果。 詭異的更新事件 3.4)順序讀(SERIALIZABLE)順序讀是最嚴格的事務隔離級別。它要求所有的事務排隊順序執⾏行行,即事務只能一個接一個地處理,不能併發。六:不同隔離級別的鎖的情況(瞭解)
1. 讀未提交(RU): 有行級的鎖,沒有間隙鎖。它與RC的區別是能夠查詢到未提交的資料。
2. 讀已提交(RC):有行級的鎖,沒有間隙鎖,讀不到沒有提交的資料。
3. 可重複讀(RR):有行級的鎖,也有間隙鎖,每次讀取的資料都是一樣的,並且沒有幻讀的情況。 4. 序列化(S):有行級鎖,也有間隙鎖,讀表的時候,就已經上鎖了