mysql 鎖機制 行 字段 MySql鎖機制

2021-10-22 05:32:05 字數 983 閱讀 4825

鎖跟事務有關

一、共享鎖(讀鎖/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 也...