背景
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了黃浦免費(fèi)建站歡迎大家使用!
數(shù)據(jù)庫(kù)的鎖是在多線程高并發(fā)的情況下用來(lái)保證數(shù)據(jù)穩(wěn)定性和一致性的一種機(jī)制。MySQL 根據(jù)底層存儲(chǔ)引擎的不同,鎖的支持粒度和實(shí)現(xiàn)機(jī)制也不同。MyISAM 只支持表鎖,InnoDB 支持行鎖和表鎖。目前 MySQL 默認(rèn)的存儲(chǔ)引擎是 InnoDB,這里主要介紹 InnoDB 的鎖。
使用 InnoDB 的兩大優(yōu)點(diǎn):一是支持事務(wù);二是支持行鎖。
在高并發(fā)的情況下事務(wù)的并發(fā)處理會(huì)帶來(lái)幾個(gè)問(wèn)題
由于高并發(fā)事務(wù)帶來(lái)這幾個(gè)問(wèn)題,所以就產(chǎn)生了事務(wù)的隔離級(jí)別
舉個(gè)例子
按照上面 1,2,3,4 的順序執(zhí)行會(huì)發(fā)現(xiàn)第 4 步被阻塞了,必須執(zhí)行完第 5 步后才能插入成功。這里我們會(huì)很奇怪明明鎖住的是uid=6 的這一行,為什么不能插入 5 呢?原因就是這里采用了 next-key 的算法,鎖住的是(3,10)整個(gè)區(qū)間。感興趣的可以試一下。
今天給大家分享了一下 MySQL 的 InnoDB 的事務(wù)以及鎖的一些知識(shí),通過(guò)自己的實(shí)際上手實(shí)踐對(duì)這塊更加熟悉了,希望大家在看的時(shí)候也可以動(dòng)手試試,這樣更能體會(huì),理解的更深刻。
mysql鎖機(jī)制是在并發(fā)操作的時(shí)候,避免多人同時(shí)操作而發(fā)生錯(cuò)誤。
先說(shuō)一下表級(jí)鎖吧
表級(jí)鎖 一般引擎都支持,資源消耗小。申請(qǐng)鎖的時(shí)候 整表鎖定(分讀寫鎖),其它線程或操作不能進(jìn)行操作
行級(jí)鎖 INNODB引擎支持。資源消耗大 鎖定的時(shí)候 被鎖的行只能進(jìn)行一個(gè)操作 其它均不能操作些行。
全局鎖
顧名思義,全局鎖就是對(duì)整個(gè)數(shù)據(jù)庫(kù)實(shí)例加鎖。MySQL 提供了一個(gè)加全局讀鎖的方法,命令是 Flush tables with read lock (FTWRL)。當(dāng)你需要讓整個(gè)庫(kù)處于只讀狀態(tài)的時(shí)候,可以使用這個(gè)命令,之后其他線程的以下語(yǔ)句會(huì)被阻塞:數(shù)據(jù)更新語(yǔ)句(數(shù)據(jù)的增刪改)、數(shù)據(jù)定義語(yǔ)句(包括建表、修改表結(jié)構(gòu)等)和更新類事務(wù)的提交語(yǔ)句。
表級(jí)鎖
MySQL 里面表級(jí)別的鎖有兩種:一種是表鎖,一種是元數(shù)據(jù)鎖(meta data lock,MDL)。
表鎖
表鎖的語(yǔ)法是 lock tables … read/write。與 FTWRL 類似,可以用 unlock tables 主動(dòng)釋放鎖,也可以在客戶端斷開(kāi)的時(shí)候自動(dòng)釋放。需要注意,lock tables 語(yǔ)法除了會(huì)限制別的線程的讀寫外,也限定了本線程接下來(lái)的操作對(duì)象。
元數(shù)據(jù)鎖
MDL 不需要顯式使用,在訪問(wèn)一個(gè)表的時(shí)候會(huì)被自動(dòng)加上。MDL 的作用是,保證讀寫的正確性。你可以想象一下,如果一個(gè)查詢正在遍歷一個(gè)表中的數(shù)據(jù),而執(zhí)行期間另一個(gè)線程對(duì)這個(gè)表結(jié)構(gòu)做變更,刪了一列,那么查詢線程拿到的結(jié)果跟表結(jié)構(gòu)對(duì)不上,肯定是不行的。
InnoDB默認(rèn)是行級(jí)別的鎖,當(dāng)有明確指定的主鍵時(shí)候,是行級(jí)鎖。否則是表級(jí)別。
例子: 假設(shè)表foods ,存在有id跟name、status三個(gè)字段,id是主鍵,status有索引。
例1: (明確指定主鍵,并且有此記錄,行級(jí)鎖)
例2: (明確指定主鍵/索引,若查無(wú)此記錄,無(wú)鎖)
例3: (無(wú)主鍵/索引,表級(jí)鎖)
例4: (主鍵/索引不明確,表級(jí)鎖)
for update的注意點(diǎn)
for update的疑問(wèn)點(diǎn)
網(wǎng)站標(biāo)題:mysql六大鎖怎么分析,mysql加鎖處理分析
網(wǎng)站鏈接:http://jinyejixie.com/article8/dsdjgop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、用戶體驗(yàn)、服務(wù)器托管、網(wǎng)站導(dǎo)航、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)