小編給大家分享一下MySQL-InnoDB鎖的示例分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
目前創(chuàng)新互聯(lián)建站已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、吳起網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
鎖類型
行級(jí)鎖
鎖模式只有LOCK_S 和LOCK_X,其他的 FLAG 用于鎖的描述,如前述 LOCK_GAP、LOCK_REC_NOT_GAP 以及 LOCK_ORDINARY、LOCK_INSERT_INTENTION 四種描述。(相關(guān)推薦: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} };
對(duì)于GAP類型(鎖對(duì)象建立在supremum上或者申請(qǐng)的鎖類型為LOCK_GAP)且申請(qǐng)的不是插入意向鎖時(shí),無需等待任何鎖,這是因?yàn)椴煌琒ession對(duì)于相同GAP可能申請(qǐng)不同類型的鎖,而GAP鎖本身設(shè)計(jì)為不互相沖突;
LOCK_ORDINARY 或者LOCK_REC_NOT_GAP類型的鎖對(duì)象,無需等待LOCK_GAP類型的鎖;
LOCK_GAP類型的鎖無需等待LOCK_REC_NOT_GAP類型的鎖對(duì)象;
任何鎖請(qǐng)求都無需等待插入意向鎖。
表級(jí)鎖
InnoDB的表級(jí)別鎖包含五種鎖模式:LOCK_IS、LOCK_IX、LOCK_X、LOCK_S以及LOCK_AUTO_INC鎖,鎖之間的相容性遵循數(shù)組lock_compatibility_matrix中的定義。
InnoDB表級(jí)鎖的目的是為了防止DDL和DML的并發(fā)問題。但從5.5版本開始引入MDL鎖后,InnoDB層的表級(jí)鎖的意義就沒那么大了,MDL鎖本身已經(jīng)覆蓋了其大部分功能。
意向鎖是表級(jí)別的,IS和IX鎖之間相互并不沖突,但與表級(jí)S/X鎖沖突。
在對(duì)記錄加S鎖或者X鎖時(shí),必須保證其在相同的表上有對(duì)應(yīng)的意向鎖或者鎖強(qiáng)度更高的表級(jí)鎖。
看完了這篇文章,相信你對(duì)Mysql-InnoDB鎖的示例分析有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!