欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql怎么走行鎖 五味子泡制方法

MySQL中innodb的行鎖算法

眾所周知,innodb是默認(rèn)行鎖,當(dāng)然也支持表鎖。如下是對于行鎖的算法進(jìn)行的一些實(shí)驗(yàn)。

成都創(chuàng)新互聯(lián)專注于高郵網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供高郵營銷型網(wǎng)站建設(shè),高郵網(wǎng)站制作、高郵網(wǎng)頁設(shè)計(jì)、高郵網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造高郵網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供高郵網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

鎖的算法為:我知道是行鎖,但是是如何鎖的,鎖多少數(shù)據(jù)

假如有個(gè)索引是:[1,2,3,7]

record lock 鎖的是 1,2,3,7

gap lock 鎖的是 (- ,1),(2,3),(3,7),(7,+ )反正鎖的就是區(qū)間,不是行

next-key lock鎖的是 (- ,1],[2,3),[3,7),[ 7,+ )既鎖范圍也鎖行

Innodb鎖算法規(guī)則如下:

在可重復(fù)讀隔離級別下,innodb默認(rèn)使用的是next-key lock算法,當(dāng)查詢的索引是主鍵或者唯一索引的情況下,才會退化為record lock,在使用next-key lock算法時(shí),不僅僅會鎖住范圍,還會給范圍最后的一個(gè)鍵值加一個(gè)gap lock。

其中l(wèi)ockmode中的X鎖為左邊會話中的鎖,因?yàn)樾枰@式的commit之后才會釋放鎖,第二個(gè)S鎖,為右邊的共享鎖,因?yàn)橹麈IID為1的已經(jīng)被鎖住了,所以處于鎖等待狀態(tài),鎖的類型為record lock

使用輔助索引a=8進(jìn)行操作,這個(gè)時(shí)候理論應(yīng)該對主鍵索引加record lock 則 主鍵ID=8的被鎖,然后輔助索引被加next-key lock 則為:

(7,8] 然后對下一個(gè)鍵值加gap鎖,則為:(8,11)

所以目前被鎖住的記錄為:

1.主鍵為8的被鎖

2.輔助索引8的被鎖

3.輔助索引8到11之間的被鎖,意味著你這個(gè)時(shí)候往8到11之間寫數(shù)據(jù)會報(bào)錯(cuò)

當(dāng)使用范圍條件進(jìn)行更新時(shí),此時(shí)肯定是需要加X鎖的,我是用的也是主鍵,所以按照理論應(yīng)該是加的record lock ,但是卻加了gap lock,因?yàn)椴迦胫禐?0的阻塞了,查看information 也提示X.GAP

這個(gè)有點(diǎn)暈為啥主鍵變成了next-key lock ,不應(yīng)該是record lock么?

update20200515

在知乎看到的一個(gè)解釋:

即,在無論使用主鍵索引還是非主鍵索引的時(shí)候,請求共享鎖或者排他鎖,innodb會給范圍內(nèi)的記錄加鎖,而范圍內(nèi)的間隙也會被加鎖,

例如一個(gè)表t 的 id為1,2,3,7,10

假如執(zhí)行如下:

select * from t where id =3 for update

那么這個(gè)時(shí)候執(zhí)行

insert into t(id) values(8) 會被阻塞,因?yàn)槭窃谡埱笈潘i時(shí)使用了范圍,所以[3,10],甚至10以后的任何數(shù)據(jù)都無法插入。

執(zhí)行

select * from t where id =3 lock in share mode

insert into t(id) values(8) 會被阻塞,因?yàn)槭窃谡埱蠊蚕礞i時(shí)使用了范圍,所以[3,10],甚至10以后的任何數(shù)據(jù)都無法插入。

幻讀是同一事務(wù)下,連續(xù)執(zhí)行兩次同樣的sql可能導(dǎo)致不同的結(jié)果,第二次返回的數(shù)據(jù)可能導(dǎo)致以前不存在的行。

同時(shí)一般會問它和臟讀的區(qū)別,臟讀為讀取到其他事務(wù)未提交的數(shù)據(jù),但是幻讀是讀取的其他事務(wù)已經(jīng)提交的數(shù)據(jù)。

reference:

MYSQL行級鎖使用方法

當(dāng) web 日志中出現(xiàn)行鎖超時(shí)錯(cuò)誤后,很多開發(fā)都會找我來排查問題,這里說下問題定位的難點(diǎn)!

1. MySQL 本身不會主動(dòng)記錄行鎖等待的相關(guān)信息,所以無法有效的進(jìn)行事后分析。

2. 鎖爭用原因有多種,很難在事后判斷到底是哪一類問題場景,尤其是事后無法復(fù)現(xiàn)問題的時(shí)候。

3. 找到問題 SQL 后,開發(fā)無法有效從代碼中挖掘出完整的事務(wù),這也和公司框架-產(chǎn)品-項(xiàng)目的架構(gòu)有關(guān),需要靠 DBA 事后采集完整的事務(wù) SQL 才可以進(jìn)行分析。

mysql如何用事務(wù)和鎖 鎖住某一行數(shù)據(jù),使得不允許兩個(gè)用戶同時(shí)讀取一行數(shù)據(jù)!!

1、在mysql數(shù)據(jù)庫中如何鎖定一行數(shù)據(jù),保證不被其他的操作影響。

2、從對數(shù)據(jù)的操作類型分為讀鎖和寫鎖。從對數(shù)據(jù)操作的粒度來分:表鎖和行鎖。

3、現(xiàn)在我們建立一個(gè)表來演示數(shù)據(jù)庫的行鎖講解。

4、行鎖基本演示如下圖所示。

5、如果兩個(gè)會話操作的是不同的行,就不會互相阻塞了。

分享文章:mysql怎么走行鎖 五味子泡制方法
本文鏈接:http://chinadenli.net/article30/ddgsepo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣外貿(mào)建站關(guān)鍵詞優(yōu)化做網(wǎng)站小程序開發(fā)定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化