Mysql|鎖 ——表鎖

昨天,我們聊到全局鎖,感覺全局鎖有點廢,加了鎖還有可能出那么多問題,如果不加的話,,備份系統(tǒng)備份的得到的庫不是一個邏輯時間點,這個視圖是邏輯不一致的。那么又會導(dǎo)致數(shù)據(jù)不一致的結(jié)果,所以我就果斷的放棄了這個雞肋。去尋找新的一把鎖,表鎖。
MySQL 里面表級別的鎖有兩種:一種是表鎖,一種是元數(shù)據(jù)鎖(meta data lock,MDL)。
表鎖
語法 :lock tables tables_name read/write,用unlock tables 主動釋放鎖,需要注意,lock tables 語法除了會限制別的線程的讀寫外,也限定了本線程接下來的操作對象。
舉個文中的例子,如果在某個線程 A 中執(zhí)行 lock tables t1 read, t2 write; 這個語句,則其他線程寫 t1、讀寫 t2 的語句都會被阻塞。同時,線程 A 在執(zhí)行 unlock tables 之前,也只能執(zhí)行讀 t1、讀寫 t2 的操作。連寫 t1 都不允許,自然也不能訪問其他表。
這里有幾個概念,讀鎖,寫鎖,讀寫鎖。
讀鎖之間不互斥,因此你可以有多個線程同時對一張表增刪改查。
讀寫鎖之間、寫鎖之間是互斥的,用來保證變更表結(jié)構(gòu)操作的安全性。因此,如果有兩個線程要同時給一個表加字段,其中一個要等另一個執(zhí)行完才能開始執(zhí)行。
這樣你應(yīng)該就能很好的理解吧。

元數(shù)據(jù)鎖 稱為MDL鎖。
MDL 不需要顯式使用,在訪問一個表的時候會被自動加上。MDL 的作用是,保證讀寫的正確性。
事務(wù)中的MDL鎖,在語句開始時申請,但是語句結(jié)束不會馬上釋放,就算是查詢語句,也要等整個事務(wù)提交后再釋放。
今天就寫在這里啊。


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

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