行鎖
shared Locks 共享鎖
也叫讀鎖
Exclusive Locks 排他鎖
也叫寫鎖
表鎖 意向鎖
數(shù)據(jù)庫自己維護(hù)的,使用行鎖前,數(shù)據(jù)庫會(huì)先給表加表鎖
它并不會(huì)真正的給表加上鎖冗酿,只是會(huì)加上一個(gè)標(biāo)志。
主要是能讓其它事務(wù)知道斩祭,表里面有數(shù)據(jù)被加鎖了。不用去每一行數(shù)據(jù)看是否有鎖乡话。
意向共享鎖
意向排它鎖
鎖到底是鎖住了什么?
行 列 還是表停忿?
鎖住的就是索引,沒有索引rowId的方式蚊伞,全表掃描時(shí)會(huì)把所有的rowId全部鎖住
無索引的情況:
表象時(shí)整張表席赂,如上
主鍵索引的情況:
當(dāng)然會(huì)鎖住一行
輔助索引+主鍵索引的情況:
輔助索引和主鍵索引都會(huì)鎖住,因?yàn)橐ㄟ^輔助索引找到主鍵索引再來找到數(shù)據(jù)
鎖定范圍(區(qū)間劃分):
記錄鎖 實(shí)際存在的主鍵的值(record)
唯一性索引等值查詢时迫,精準(zhǔn)匹配
間隙鎖 由實(shí)際記錄劃分開的不存在數(shù)據(jù)的區(qū)間(gap)
記錄不存在時(shí)颅停,where條件不包含任何一個(gè)存在的鍵值
**間隙鎖相互之間不沖突**
臨鍵鎖 就是左開右閉的gap(next-key)
**默認(rèn)的鎖應(yīng)該是臨鍵鎖**,視情況會(huì)退化為上面的那種鎖
就是靠臨鍵鎖的方式鎖住了下一個(gè)空間掠拳,這樣其它事務(wù)就沒法插入了癞揉。靠這個(gè)就**解決了幻讀**溺欧。
事務(wù)隔離級(jí)別的實(shí)現(xiàn)(RR級(jí)別)
不加鎖的select MVCC
DML語句和加鎖的讀喊熟,使用上面的三種鎖
**RC下面的情況就只有record Lock**
用RC可以換來,UPDATE DELETE 沒有命中索引時(shí)不鎖表姐刁,UPDATE半一致性讀
字符怎么排序?
ASCII碼排序的
死鎖(說白了就是兩個(gè)事務(wù)互相等待)
鎖的默認(rèn)超時(shí)時(shí)間
innodb_lock_wait_timout = 50s
數(shù)據(jù)庫會(huì)自動(dòng)檢測到死鎖的發(fā)生
檢測條件 圖算法
1)互斥
2)不可剝奪
3)形成等待環(huán)路
infomation_schema庫
INNODB_TRX表里面有所有事務(wù)的信息
INNODB_LOCKS有鎖的信息