mysql之鎖(全局&表&行)

根據(jù)加鎖的范圍,MYSQL里面的鎖大致分為全局鎖、表級(jí)鎖、行鎖。

全局鎖:對(duì)整個(gè)數(shù)據(jù)庫(kù)實(shí)例加鎖。命令:Flush tables with read lock (FTWRL)
表級(jí)鎖:一種是表鎖,一種是元數(shù)據(jù)鎖(meta data lock,MDL)。
行鎖:

1、全局鎖

全局鎖命令:Flush tables with read lock (FTWRL)
應(yīng)用場(chǎng)景: 做全庫(kù)邏輯備份。
single-transaction 方法只適用于所有的表使用事務(wù)引擎的庫(kù)。

2、表級(jí)鎖

表鎖語(yǔ)法:lock tables … read/write,比如lock tables t1 read, t2 write;
釋放鎖:unlock tables
應(yīng)用場(chǎng)景:一般在數(shù)據(jù)庫(kù)引擎不支持行鎖的時(shí)候會(huì)被用到。
在 alter table 語(yǔ)句里面設(shè)定等待時(shí)間,如果在這個(gè)指定的等待時(shí)間里面能夠拿到 MDL 寫鎖最好,拿不到也不要阻塞后面的業(yè)務(wù)語(yǔ)句,先放棄:
ALTER TABLE tbl_name NOWAIT add column ...
ALTER TABLE tbl_name WAIT N add column ...

3、行鎖

行鎖:在引擎層由各個(gè)引擎自己實(shí)現(xiàn)的。行鎖針對(duì)數(shù)據(jù)表中行記錄的鎖。
兩階段鎖協(xié)議:在 InnoDB 事務(wù)中,行鎖是在需要的時(shí)候才加上的,但并不是不需要了就立刻釋放,而是要等到事務(wù)結(jié)束時(shí)才釋放。
死鎖:在并發(fā)系統(tǒng)中不同線程出現(xiàn)循環(huán)資源依賴,涉及的線程都在等待別的線程釋放資源時(shí),就會(huì)導(dǎo)致這幾個(gè)線程都進(jìn)入無(wú)限等待的狀態(tài)。
死鎖檢測(cè):發(fā)現(xiàn)死鎖后,主動(dòng)回滾死鎖鏈條中的某一個(gè)事務(wù),讓其他事務(wù)得以繼續(xù)執(zhí)行。將參數(shù) innodb_deadlock_detect = on,表示開啟這個(gè)邏輯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容