mysql 顯式加鎖

2021-09-23 01:45:09 字數 970 閱讀 8191

常用的觀察命令

show processlist

show status like 『innodb_row_lock%』;

排他鎖原理是:

如果乙個事務需要一條資料

它就把資料鎖住

如果另乙個事務也需要這條資料

它就必須要等第乙個事務釋放這條資料

這個鎖叫排他鎖。

但是對乙個僅僅讀取資料的事務使用排他鎖非常昂貴,因為這會迫使其它只需要讀取相同資料的事務等待。因此就有了另一種鎖,共享鎖。

共享鎖是這樣的:

如果乙個事務只需要讀取資料a

它會給資料a加上『共享鎖』並讀取

如果第二個事務也需要僅僅讀取資料a

它會給資料a加上『共享鎖』並讀取

如果第三個事務需要修改資料a

它會給資料a加上『排他鎖』,但是必須等待另外兩個事務釋放它們的共享鎖。

同樣的,如果一塊資料被加上排他鎖,乙個只需要讀取該資料的事務必須等待排他鎖釋放才能給該資料加上共享鎖。

it allows multiple threads to read a certain resource, but only one to write it, at a time.
事務可以通過以下語句顯示給記錄集加共享鎖或排鎖。 事務commit或者rollback後鎖才會被釋放

共享鎖(s):select * from table_name where … lock in share mode

排他鎖(x):select * from table_name where … for update

用select … in share mode獲得共享鎖,主要用在需要資料依存關係時確認某行記錄是否存在,並確保沒有人對這個記錄進行update或者delete操作。但是如果當前事務也需要對該記錄進行更新操作,則很有可能造成死鎖,對於鎖定行記錄後需要進行更新操作的應用,應該使用select … for update方式獲取排他鎖。

mysql顯式和隱式效率 顯式與隱式SQL連線

顯式和隱式內部聯接是否存在效率差異?例如 select from table a inner join table b on a.id b.id 與select a.b.from table a,table b where a.id b.id 在mysql 5.1.51上,兩個查詢的執行計畫相同 m...

mysql 隱式和顯式鎖定

innodb採用兩階段鎖定協議,在事務執行過程中,隨時都可以執行鎖定,鎖只有在執行commit或rollback的時候才會釋放,並且所有的鎖是在同一時刻被釋放的,前面所述的鎖定是隱式鎖定,innodb會根據事務的隔離級別在需要的時候自動加鎖。select lock in share mode sel...

mysql自定義加鎖 為MySQL加鎖?

在日常操作中,update insert delete innodb會自動給涉及的資料集加排他鎖,一般的 select 一般是不加任何鎖的。我們可以使用以下方式顯示的為 select 加鎖。共享鎖 select from table name where id 10 lock in share mo...