鎖跟事務有關
一、共享鎖(讀鎖/s鎖)
1. 多個事務的查詢語句,對同一資料,可以共享一把鎖,都能訪問到最新資料
2. 如果只有乙個事務獲取到了乙個共享鎖,可以更新、刪除
3. 如果多個事務都獲取到了同乙個共享鎖,多個事務都不可以更新、刪除
4. 使用場景:多個事務都可以獲取最新資料
二、排它鎖(寫鎖/x鎖)
1. 不能與其他鎖共存,只有乙個事務能拿到鎖
2. 鎖釋放後,其他事務才能獲取
3. 使用場景:乙個事務進行查詢、更新、刪除操作
三、自增鎖
1. 如果表中存在自增字段,mysql會自動維護乙個自增鎖
2. 當事務插入一條資料,自增+1,事務未提交時,查不到這條資料,提交後才能查到
記錄鎖、間隙鎖、臨鍵鎖都是排它鎖
四、記錄鎖(行鎖)
1. 鎖住一行記錄
2. 阻止該行被其他事務操作(刪除、更新、插入同樣的id)
五、間隙鎖
1. 封鎖
a. 索引記錄中的間隔,例如(1,3], (3,5]等
b. 第一條索引之前的範圍,即(-infinity,1]
c. 最後一條索引之後的範圍,即(5,infinity]
2. 產生間隙鎖的條件
a. 使用普通索引鎖定
b. 使用多列唯一索引
c. 使用唯一索引鎖定多行記錄
3. 只有在事務隔離級別為rr時,才會產生
4. 唯一索引:鎖住多條記錄,或者不存在的記錄時,才會產生間隙鎖
5. 普通索引:鎖住單條、多條記錄,都會產生間隙鎖
6. 鎖住該條記錄相鄰的兩個鍵之間的空白區域,防止其他事務在這個範圍內插入、修改、刪除
7. 防止出現幻讀
8. 如果事務隔離級別是rc,間隙鎖將會失效
六、臨鍵鎖
記錄鎖和間隙鎖的組合,既包含索引記錄,又包含索引區間
參考:標籤:事務,刪除,記錄,間隙,鎖住,索引,mysql,機制
mysql行鎖爭用 Mysql行鎖機制引發的血案
最近在開發中使用到了多執行緒對同個表進行讀寫操作,由於資料庫基礎渣渣,寫完 後程式跑起來出現了死鎖。於是對日誌進行分析跟蹤,發現在執行以下sql時出現死鎖 update linkgoo message queue set state 3 where state 2 很明顯在執行上述sql時,由於某個...
mysql 埠8504 mysql行鎖機制 轉
1 innodb行鎖是通過給索引上的索引項加鎖來實現的,只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖。2 由於mysql的行鎖是針對索引加的鎖,不是針對記錄加的鎖,所以雖然是訪問不同行的記錄,但是如果是使用相同的索引鍵,是會出現鎖衝突的。應用設計的時候要注意這一點...
mysql鎖機制 mysql 鎖機制
一 概述 mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row level locking 也...