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ú)占鎖 互斥 ???????? 不互斥 ???????????? 互斥 ???????? 不互斥
共享鎖 ???????? 互斥 ???????? 互斥? ? ? ? ? ? ? ? 不互斥???? 不互斥
意向共享鎖 ????互斥 ???? 不互斥 ???????????? 不互斥???? 不互斥