infinity mysql_MySql锁机制
一、鎖跟事務有關
mysql默認的事務隔離級別是:可重復讀(RR)
二、共享鎖(讀鎖/S鎖)
1. 多個事務的查詢語句,對同一數據,可以共享一把鎖,都能訪問到最新數據
2. 如果只有一個事務獲取到了一個共享鎖,可以更新、刪除
3. 如果多個事務都獲取到了同一個共享鎖,多個事務都不可以更新、刪除
4. 使用場景:多個事務都可以獲取最新數據
三、排它鎖(寫鎖/X鎖)
1. 不能與其他鎖共存,只有一個事務能拿到鎖
2. 鎖釋放后,其他事務才能獲取
3. 使用場景:一個事務進行查詢、更新、刪除操作
四、自增鎖
1. 如果表中存在自增字段,MySql會自動維護一個自增鎖
2. 當事務插入一條數據,自增+1,事務未提交時,查不到這條數據,提交后才能查到
五、記錄鎖(行鎖)
1. 鎖住一行記錄
2. 阻止該行被其他事務操作(刪除、更新、插入同樣的ID)
六、間隙鎖(gap lock)
1. 概念
a. 索引記錄中有間隔,例如id字段上建了索引,表里有3條記錄,id分別為1,3,5
b. 兩條記錄之間的間隔(1,3],?(3,5]
c. 第一條索引之前的范圍,即(-infinity,1]
d. 最后一條索引之后的范圍,即(5,infinity]
e. 這種間隔或者范圍之間的鎖,叫做間隙鎖,間隙是前開后閉原則
f. 間隙鎖的作用:間隙內的數據,即一定范圍內的數據,在鎖定情況下,不發生變化
2. 產生間隙鎖的條件
a. 使用普通索引鎖定
b. 使用多列唯一索引
c. 使用唯一索引鎖定多行記錄
3. 只有在事務隔離級別為RR時,才會產生
4. 唯一索引:鎖住多條記錄,或者不存在的記錄時,才會產生間隙鎖
5. 普通索引:鎖住單條、多條記錄,都會產生間隙鎖
6. 鎖住該條記錄相鄰的兩個鍵之間的空白區域,防止其他事務在這個范圍內插入、修改、刪除
7. 防止出現幻讀,幻讀是因為新增或更新操作,范圍查詢會出現數據不一致的問題
8. 如果事務隔離級別是RC,間隙鎖將會失效
七、臨鍵鎖(next-key lock)
1. 記錄鎖和間隙鎖的組合,既包含索引記錄,又包含索引區間
2.?記錄鎖、間隙鎖、臨鍵鎖都是排它鎖
參考:
總結
以上是生活随笔為你收集整理的infinity mysql_MySql锁机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精通java图片_面试必备:详解Java
- 下一篇: java xml 验证工具_验证xml格