MySQL中鎖的詳解

2021-10-10 10:10:04 字數 1045 閱讀 1699

myisam支援表鎖,同時也支援列所,表鎖加鎖方式:

lock

tables 表名 read

;lock

tables 表名 write

;unlock

tables

;

鎖名

鎖級別英文名稱

共享鎖行鎖

shared locks

排它鎖行鎖

exclusive locks

意向共享鎖

表鎖intention shared locks

意向排它鎖

表鎖intention exclusive locks

又稱為讀鎖,簡稱s鎖,顧名思義,共享鎖就是多個事務對於同乙個資料可以共享一把鎖,都能訪問到資料,但是只能讀不能修改;

select

*from

table

where id =

1lock

inshare

mode

;

釋放鎖:當前你事務結束,或者當前連線斷開,都會釋放當前鎖,不管當前資料是否commit/rollback

又稱為寫鎖,簡稱為x鎖,排它鎖不能與其他鎖並存,如果乙個事務獲取了乙個資料行的排它鎖,其他事務就不能再獲取該鎖,只有該獲取了排它鎖的事務是可以對資料行進行讀取和修改。

意向鎖是由資料引擎自己維護的,使用者無法手動操作意向鎖

為什麼需要表級別的意向鎖?假設沒有意向鎖,我們加表鎖的時候,需要去掃瞄全表是否有存在鎖,資料量過大的時候,會導致加鎖效率很低。但是如果我們在加鎖的時候,資料庫給我們自動加上意向鎖,標記當前表,某個地方已經有了鎖,那麼我們就可以以很低的消耗,來完成是否加鎖這個動作

這兩個種類的鎖的作用都是一樣的,都是為了解決資源併發的情況下,對資源的寫問題的控制。簡單來說就是解決併發。

在mysql資料庫中,鎖的本質就是對索引打上標記,如果當前表沒有索引,則直接找到sequence/rownum這樣的預設表序列,完成鎖表。

MySQL中鎖詳解

相對於其他的資料庫而言,mysql的鎖機制比較簡單,最顯著的特點就是不同的儲存引擎支援不同的鎖機制。根據不同的儲存引擎,mysql中鎖的特性可以大致歸納如下 行鎖表鎖 頁鎖myisam bdb innodb 開銷 加鎖速度 死鎖 粒度 併發效能 表鎖更適用於以查詢為主,只有少量按索引條件更新資料的應...

mysql行鎖詳解 詳解MySQL行鎖

鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。鎖保證資料併發訪問的一致性 有效性 鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。鎖是mysql在伺服器層和儲存引擎層的的併發控制。mysql中從對資料操作的粒度分為表鎖和行鎖。表鎖是指對一整張表加鎖,一般是 ddl 處理時使用 而行鎖則是鎖定...

詳解mysql間隙鎖

1.什麼是間隙鎖?1 對於鍵值在條件範圍內但並不存在的記錄 在相等條件下請求給乙個不存在的記錄也會加鎖 叫做 間隙 gap innodb也會對這個 間隙 加鎖,這種鎖機制就是所謂的間隙鎖 next key鎖 2 查詢使用的範圍條件不是相等條件,innodb會給符合條件的已有資料記錄的索引項加鎖 2....