sqlserver 資料庫排它鎖 MySQL 鎖

2021-10-19 05:48:19 字數 2129 閱讀 2353

鎖的由來

我們需要最大程度地利用資料庫的併發訪問,還需要確保每個使用者以一致性的方式讀取和修改資料,為解決此問題,有了鎖的機制

innodb 儲存引擎相對比mysql 資料庫的其他儲存引擎在這方面要技高一籌

mysql 常用引擎:innodb、myisam、memory

鎖機制用於管理對共享資源的併發訪問,為了保證資料一致性和完整性,必須要有鎖的介入

mysql innodb 鎖的基本型別

有兩個概念的鎖lock 和latch,這裡著重聊聊lock 鎖

latch 輕量級的鎖,因為其要求鎖定的時間必須非常短,如果持續的時間長,則應用的效能會非常差。在innodb 引擎中,latch 可以分為mutex(互斥)和rwlock(讀寫鎖)。用來保證併發執行緒操作臨界資源的正確性,並且沒有死鎖檢測的機制

lock 的物件是事務,用來鎖定資料庫中的物件,如表、頁、行。lock 是在事務commit 或rollback 後進行釋放

在innodb 儲存引擎中的latch,可以通過命令來進行檢視

show engine innodb mutex;

mysql innodb 鎖的基本型別

兩個行級別的鎖(shared and exclusive locks)和兩個表級別的鎖(intention locks)稱為鎖的基本模式

後面三個 record locks、gap locks、next-key locks,我們把它們叫做鎖的演算法

鎖的粒度

在innodb 裡面既有行級別的鎖,又有表級別的鎖,來看下兩者的區別

表鎖:鎖住一張表

行鎖:鎖住表裡面的一行資料

鎖定粒度,表鎖肯定是大於行鎖。另外,表鎖的加鎖效率要比行鎖效率更高

共享鎖第乙個行級別的鎖shared locks(共享鎖),獲取一行資料的讀鎖以後,可以用來讀取資料,所以它也叫做讀鎖,不要在加上了讀鎖以後去寫資料,容易出現死鎖的情況。

通過: select .... lock in share mode; 手工加上一把鎖

共享鎖是可以重複獲取的,通過以下sql 可以進行驗證

釋放鎖有兩種方式,只要事務結束,鎖就會自動釋放,包括提交事務和結束事務

拍它鎖第二個級別的鎖叫做exclusive locks(排它鎖),用來運算元據又稱寫鎖

排它鎖加鎖的方式

1)自動加排它鎖。在運算元據的時候,包括增刪改,都會預設加上一把排它鎖

2)手工加鎖,用乙個for update 給一行資料加上一把排它鎖

以上是兩個行鎖,接下來是兩個表鎖

意向鎖這把鎖是由資料庫自己維護的,我們在給一行資料加上共享鎖之前,資料庫會自動在這張表上面加一把意向共享鎖;當我們給一行資料加上排他鎖之前,資料庫會自動在這張表上面加乙個意向排他鎖

這兩把鎖存在意義何在?

1)有了表級別的鎖,在innodb 裡面就可以支援更多粒度的鎖

2)加表鎖前可以不必去掃瞄整張表,只需要判斷這張表上面有沒有意向鎖,如果有,就直接返回失敗,沒有的話,就可以加鎖成功

在innodb 裡的表鎖,可以理解成乙個標誌

以上就是mysql 4種基本鎖的模式

鎖的原理

鎖住是什麼?思考過嗎?

是索引,鎖是通過索引來實現的

場景:如果表中沒有索引的時候,鎖住一行資料會導致什麼情況?一張表中可能會沒有索引嗎?

1)如果定義了主鍵(primary key) ,innodb 會選擇主鍵作為聚集索引

2) 如果沒有顯示定義主鍵,innodb 會選擇第乙個不包含有 null 值的唯一索

引作為主鍵索引

3)如果也沒有這樣的唯一索引,則 innodb會選擇內建6位元組長的rowid作為隱藏的聚集索引,它會隨著行記錄的寫入而主鍵遞增

先寫到這裡,後續會繼續此篇內容,為故而知新

mysql排它鎖 MySQL資料庫排他鎖與共享鎖

我們先針對mysql資料庫的排他鎖 共享鎖給出下面乙個結論 結論 1 共享鎖 s鎖 又稱讀鎖,若事務t是最早對資料物件a加上s鎖的事務,則事務t可以讀a也能修改a,其他事務只能再對a加s鎖,而不能加x鎖,直到t釋放a上的s鎖。這保證了其他事務可以讀a,但在t釋放a上的s鎖之前不能對a做任何修改。共享...

鎖 排它鎖 悲觀鎖

查詢中a使用 for update 當其他使用者查詢被鎖的記錄的時候,會跳過這條記錄。如 a select from test zhi where khh 001676786773 for update 預設行級鎖 b select from test zhi for update skip loc...

sql server行級鎖,排它鎖,共享鎖的使用

鎖的概述 一.為什麼要引入鎖 多個使用者同時對資料庫的併發操作時會帶來以下資料不一致的問題 丟失更新 a,b兩個使用者讀同一資料並進行修改,其中乙個使用者的修改結果破壞了另乙個修改的結果,比如訂票系統 髒讀 a使用者修改了資料,隨後b使用者又讀出該資料,但a使用者因為某些原因取消了對資料的修改,資料...