首頁  >  文章  >  資料庫  >  Mysql-InnoDB鎖定的相關內容介紹

Mysql-InnoDB鎖定的相關內容介紹

不言
不言轉載
2019-02-21 12:00:492117瀏覽

這篇文章帶給大家的內容是關於Mysql-InnoDB鎖定的相關內容介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

鎖定類型

行級鎖

鎖定模式只有LOCK_S 和LOCK_X,其他的FLAG 用於鎖的描述,如前述LOCK_GAP、LOCK_REC_NOT_GAP 以及LOCK_ORDINARY、LOCK_INSERT_INTENTION 四種說明。 (相關推薦:MySQL教學

LOCK_REC_NOT_GAP

LOCK_GAP

LOCK_ORDINARY(Next-Key Lock)

#LOCK_INSERT_INTENTION

static const byte lock_compatibility_matrix[5][5] = {
/** IS IX S X AI /
/ IS / { TRUE, TRUE, TRUE, FALSE, TRUE},
/ IX / { TRUE, TRUE, FALSE, FALSE, TRUE},
/ S / { TRUE, FALSE, TRUE, FALSE, FALSE},
/ X / { FALSE, FALSE, FALSE, FALSE, FALSE},
/ AI / { TRUE, TRUE, FALSE, FALSE, FALSE}
};

對於GAP類型(鎖物件建立在supremum上或申請的鎖類型為LOCK_GAP)且申請的不是插入意向鎖時,無需等待任何鎖,這是因為不同Session對於相同GAP可能申請不同類型的鎖,而GAP鎖本身設計為不互相衝突;
LOCK_ORDINARY 或LOCK_REC_NOT_GAP類型的鎖對象,無需等待LOCK_GAP類型的鎖;
LOCK_GAP類型的鎖無需等待LOCK_REC_NOT_GAP類型的鎖對象;
任何鎖定請求類型的鎖定請求都無需等待插入意向鎖。

表級鎖定

InnoDB的表格層級鎖定包含五種鎖定模式:LOCK_IS、LOCK_IX、LOCK_X、LOCK_S以及LOCK_AUTO_INC鎖,鎖定之間的相容性遵循數組lock_compatibility_matrix中的定義。

InnoDB表格層級鎖定的目的是為了防止DDL和DML的並發問題。但從5.5版本開始引入MDL鎖定後,InnoDB層的表級鎖定的意義就沒那麼大了,MDL鎖定本身已經涵蓋了其大部分功能。

意向鎖是表格層級的,IS和IX鎖定之間相互並不衝突,但與表級S/X鎖定衝突。
在對記錄加S鎖或X鎖時,必須保證其在相同的表上有對應的意向鎖或鎖強度較高的表級鎖。



以上是Mysql-InnoDB鎖定的相關內容介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除