一步一步學MySQL 鎖的三種演算法

2021-08-06 06:28:47 字數 752 閱讀 4402

record lock表示在單個記錄行上加鎖,record lock總是會鎖住索引記錄,如果innodb儲存引擎表在建立的時候沒有設定任何乙個索引,那麼這是innodb儲存引擎會使用隱式的主鍵來進行鎖定。

間隙鎖,鎖定乙個範圍,但不包含記錄本身。

next-key lock的鎖定技術成為next-key locking。其設定的目的是為了解決幻象問題。next-key lock是結合了gap lock和record lock的一種鎖定演算法。

當查詢的索引含有唯一屬性的時候,innodb儲存引擎會對next-key lock進行優化,將其降為record lock,即僅僅鎖住索引本身,而不是範圍,從而提高併發效率。

gap lock的作用是為了阻止多個事務將記錄插入到同乙個範圍內,這樣會導致幻讀的產生。使用者可以通過以下兩種服務顯式地關閉gap lock。

1、  將事務的隔離級別設定為read committed

2、  將引數innodb_locks_unsafe_for_binlog設定為1

除了外來鍵約束和唯一性檢查需要的gap lock,其餘情況僅使用record lock進行鎖定。這樣做破壞了事務的隔離性,並且對於replication會導致主動資料的不一致。

對於唯一值的鎖定,next-key lock降級為record lock僅存在於查詢所有的唯一索引列。若唯一索引由多個列組成,而查詢僅是查詢多個唯一索引列中的其中乙個,那麼查詢其實是range型別,而不是point型別的查詢。此時innodb儲存引擎依然使用next-key lock進行鎖定。

一步一步學MySQL 鎖的三種演算法

record lock表示在單個記錄行上加鎖,record lock總是會鎖住索引記錄,如果innodb儲存引擎表在建立的時候沒有設定任何乙個索引,那麼這是innodb儲存引擎會使用隱式的主鍵來進行鎖定。間隙鎖,鎖定乙個範圍,但不包含記錄本身。next key lock的鎖定技術成為next key...

一步一步學cscope

告之 1,我不喜歡寫部落格 因為感覺太浪費時間 2,部落格能記住自己某階段學過的東西,而這些東西可能會很快的忘卻 所以我以後要學著在部落格上浪費時間 前言 本文件記錄了我今天 2007 11 9 下午學習cscope的一點收穫,特收錄部落格以作分享。在學習cscope過程中查閱了大量的文件,但發現適...

一步一步學Linq to sql

一步一步學linq to sql 一 預備知識 一步一步學linq to sql 二 datacontext與實體 一步一步學linq to sql 三 增刪改 一步一步學linq to sql 四 查詢句法 一步一步學linq to sql 五 儲存過程 一步一步學linq to sql 六 特性...