mysql學(xué)習(xí)-7.獨(dú)占鎖和共享鎖

1.獨(dú)占鎖(防止臟寫(xiě))

獨(dú)占鎖叫做寫(xiě)鎖

并發(fā)事務(wù)修改一行數(shù)據(jù)時(shí),會(huì)先判斷這行數(shù)據(jù)是否有被加鎖.

如果未加鎖就會(huì)添加一個(gè)獨(dú)占鎖,包含了自己的trx_id和狀態(tài)和這行數(shù)據(jù)關(guān)聯(lián)起來(lái)

第二事務(wù)過(guò)來(lái)的時(shí)候判斷到有鎖了,那么他也加一個(gè)獨(dú)占鎖在后面排隊(duì)只是狀態(tài)是待執(zhí)行的狀態(tài)

第一個(gè)事務(wù)執(zhí)行完了之后就會(huì)檢查這行數(shù)據(jù)是否有其他的鎖.他會(huì)修改一個(gè)鎖的狀態(tài)讓他進(jìn)入執(zhí)行狀態(tài)

2.共享鎖

共享鎖叫做讀鎖

去讀取加了獨(dú)占鎖的值的時(shí)候,會(huì)自動(dòng)執(zhí)行mvcc的規(guī)則去undo中讀他的快照版本

共享鎖是查詢的時(shí)候可以添加的鎖,但共享鎖和獨(dú)占鎖是互斥的.

加了獨(dú)占鎖的行是加不了共享鎖的,但另一個(gè)查詢的事務(wù)是可以加共享鎖的

所以有以下規(guī)律

鎖類型 ???? 獨(dú)占鎖 ???? 共享鎖

獨(dú)占鎖? ? ? ? 互斥 ???????? 互斥

共享鎖????????互斥? ? ? ? ? 不互斥

3.sql上加鎖的使用方式

共享鎖:在查詢語(yǔ)句后面加上lock in share mode

獨(dú)占鎖:for update

4.表級(jí)的意向鎖

表級(jí)獨(dú)占意向鎖 LOCK TABLES xxx WRITE

表級(jí)共享意向鎖 LOCK TABLES xxx READ

表級(jí)的意向鎖意義不大,可以不用考慮

鎖類型 ???? 獨(dú)占鎖 ???? 意向獨(dú)占鎖 ???? 共享鎖 ???? 意向共享鎖

獨(dú)占鎖 ???? 互斥 ???????? 互斥 ???????????????? 互斥???????? 互斥

意向獨(dú)占鎖 互斥 ???????? 不互斥 ???????????? 互斥 ???????? 不互斥

共享鎖 ???????? 互斥 ???????? 互斥? ? ? ? ? ? ? ? 不互斥???? 不互斥

意向共享鎖 ????互斥 ???? 不互斥 ???????????? 不互斥???? 不互斥

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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