MySQL中的行級(jí)鎖詳解
MySQL中鎖有很多種,其中從鎖的粒度來(lái)區(qū)分的話可以分為表級(jí)鎖,行級(jí)鎖,頁(yè)級(jí)鎖。
本文主要介紹下
行級(jí)鎖
MySQL中的行級(jí)鎖是MySQL中InnoDB存儲(chǔ)引擎提供的一種細(xì)粒度的鎖,基于索引實(shí)現(xiàn)的,鎖是加在索引上的,而不是數(shù)據(jù)行本身。
同樣是行級(jí)鎖,InnoDB存儲(chǔ)引擎對(duì)于其實(shí)現(xiàn)還可以細(xì)分為記錄鎖(Record Lock),間隙鎖(Gap Lock),臨鍵鎖(Next-Key Lock)和插入意向鎖(Insert Intention Lock)。
記錄鎖(Record Lock)
記錄鎖也就是常說(shuō)的行鎖,顧名思義其鎖定的是某一行數(shù)據(jù)。
-- id = 1 的行會(huì)被加記錄排他鎖 update product_sale_record set sold_num = sold_num + 1 where id = 1; -- id = 1 的行會(huì)被加共享鎖 select * from product_sale_record where id = 1; LOCK IN SHARE MODE;
場(chǎng)景舉例
假設(shè)兩個(gè)事務(wù)A,B并發(fā)執(zhí)行下面的SQL:
start transaction; update t_shop_product_sale_record set sold_num = sold_num +1 where id = 1; commit;
當(dāng)事務(wù)A執(zhí)行 update 時(shí)會(huì)對(duì) id = 1 這行數(shù)據(jù)的排它鎖。
在事務(wù)A未提交的情況下,如果開(kāi)啟事務(wù)B執(zhí)行 update ,會(huì)出現(xiàn)鎖等待然后超時(shí):Lock wait timeout exceeded; try restarting transaction
間隙鎖(Gap Lock)
鎖定索引記錄之間的間隙,防止其他事務(wù)在范圍內(nèi)插入新數(shù)據(jù)。
-- id 在 1 和 10 之間的間隙會(huì)被加排他鎖。 update product_sale_record WHERE id > 1 AND id < 10; -- id 在 1 和 10 之間的間隙會(huì)被加共享鎖。 select * from product_sale_record WHERE id > 1 AND id < 10 LOCK IN SHARE MODE;
臨鍵鎖(Next-Key Lock)
臨鍵鎖可以理解為是記錄鎖和間隙鎖的組合,鎖定索引記錄及其前面的間隙。
-- id > 1 的記錄及其前面的間隙會(huì)被加排他鎖 update product_sale_record WHERE id > 1; -- id > 1 的記錄及其前面的間隙會(huì)被加共享鎖 select * from product_sale_record where id > 1 LOCK IN SHARE MODE;
到此這篇關(guān)于MySQL中的行級(jí)鎖的文章就介紹到這了,更多相關(guān)mysql行級(jí)鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql use命令選擇數(shù)據(jù)庫(kù)詳解
這篇文章主要介紹了mysql 使用use命令選擇數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2016-09-09數(shù)據(jù)庫(kù)sql語(yǔ)句優(yōu)化
今天小編就為大家分享一篇關(guān)于數(shù)據(jù)庫(kù)sql語(yǔ)句優(yōu)化,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01mysql中g(shù)eneral_log日志知識(shí)點(diǎn)介紹
這篇文章主要介紹了mysql中g(shù)eneral_log日志知識(shí)點(diǎn)的介紹以及其他相關(guān)內(nèi)容,以后興趣的朋友們學(xué)習(xí)下。2019-08-08CenOS6.7下mysql 8.0.22 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了CenOS6.7下mysql 8.0.22 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11MySQL中TINYINT、INT 和 BIGINT的具體使用
MySQL提供了多種整數(shù)類型來(lái)滿足不同的數(shù)據(jù)存儲(chǔ)需求,本文主要介紹了MySQL中TINYINT、INT 和 BIGINT的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07