二、鎖事務的四大特性(acid),分別表示原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)。
原子性:整個事務中的操作要麼全部提交成功,要麼全部失敗回滾。整個執行過程不可分割。
一致性:資料庫總是從乙個一致性的狀態轉換到另外乙個一致性的狀態。比如轉賬過程中某個步驟出問題不會導致轉賬賬戶轉賬失敗損失金額的情況。
隔離性:乙個事務所做的修改在提交以前,對其他事務是不可見的。
永續性:一旦事務提交成功,則修改會永久儲存到資料庫中。
read-uncommitted(未提交讀): 即事務可以讀取到未提交的資料,即髒讀資料。
read-committed(不可重複讀):乙個事務開始時,只能讀取到已經提交的資料,這會導致第一次讀取的資料和第二次讀取的資料不一致的情況。
repeatable-read(可重複讀):可重複讀是msql預設的隔離級別,可以避免髒讀,但是無法避免幻讀。所謂幻讀是乙個事物在讀取過程中另外乙個事物又插入了資料。從而產生了幻行。
serializable(序列化):避免了幻讀,但是serializable會在讀取的每一行加鎖,導致大量的超時和鎖爭用的情況。
不可重複讀與幻讀的區別:共享鎖(s鎖):也稱讀鎖,讀鎖是共享的,互相不阻塞。事務在請求s鎖前,要先獲得is鎖。不可重複讀:指在修改過程中讀取不一致的情況(update)。
幻讀:指在新增和刪除導致讀取的資料行數不一致(insert、delete)。
使用方式: select … in share mode排他鎖(x鎖): 也稱寫鎖,寫鎖是排他的,也就是乙個寫鎖會阻塞其他的寫鎖和讀鎖。事務在請求x鎖前,要先獲得ix鎖。
使用方式: select … for update意向共享鎖(is鎖):也稱讀鎖,讀鎖是共享的,互相不阻塞。
意向排他鎖(ix鎖): 也稱寫鎖,寫鎖是排他的,也就是乙個寫鎖會阻塞其他的寫鎖和讀鎖
自增鎖: 自增鎖是mysql一種特殊的鎖,如果表中存在自增字段,mysql便會自動維護乙個自增鎖。
指的是對索引的區間(間隙)加鎖。
注:只有在事務隔離級別是repeatable-read(可重複讀)和serializable(序列化)時才會存在間隙鎖。(iix,也屬於一種特殊的間隙鎖,不同於間隙鎖的是,該鎖只用於插入操作),但是兩個事務不能同一時間內乙個擁有間隙鎖,乙個擁有該間隙區間內的插入意向鎖。
就是(行鎖 + 間隙鎖)組合鎖
具體鎖分析案例可以參考如下部落格:
mysql事務與鎖機制 mysql事務與鎖機制
在併發下事務會容易出現的一些問題 資料更新丟失 兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失 髒讀 乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。不可重複讀 乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的...
MYSQL 事務與鎖
事務的特性 acid 原子性一致性 隔離性永續性 通過redolog 和 doublewrite 頁損壞的情況 實現永續性 事務什麼時候開啟 預設自動開啟,自動提交。通過begin 命令顯式開啟事務 通過commit rollback 結束事務。事務的隔離級別 讀未提交 存在的問題 髒讀 不可重複讀...
mysql中的事務和鎖 MySQL中的事務和鎖
鎖 行級鎖select for update nowaitfalse,skip false 注意必須用在事物裡面 所有匹配的行將被鎖定,知道事務結束。這意味著可以通過鎖防止資料被其他事務修改。一般情況下如果其他事務鎖定了相關行,那麼本查詢將被阻塞,直到鎖被釋放。事務事務的四大特性 1.原子性 事務包...