mysql共享鎖與排他鎖

共享鎖又稱為讀鎖,簡(jiǎn)稱S鎖,顧名思義,共享鎖就是多個(gè)事務(wù)對(duì)于同一數(shù)據(jù)可以共享一把鎖,都能訪問(wèn)到數(shù)據(jù),但是只能讀不能修改。
排他鎖又稱為寫鎖,簡(jiǎn)稱X鎖,顧名思義,排他鎖就是不能與其他所并存,如一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的排他鎖,其他事務(wù)就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務(wù)是可以對(duì)數(shù)據(jù)就行讀取和修改。

簡(jiǎn)單說(shuō),在一個(gè)事物中共享鎖上鎖后,使用共享鎖、排它鎖、普通查詢都可以查到數(shù)據(jù)。排它鎖上鎖后,共享鎖不能讀取數(shù)據(jù),普通查詢?cè)谶@倆鎖之間都可以讀取數(shù)據(jù)。

開啟事物 上排它鎖。


1.png

使用共享鎖查詢數(shù)據(jù)、可以看到此時(shí)處于阻塞狀態(tài)。


2.png

普通查詢、沒(méi)問(wèn)題(說(shuō)明普通查詢不受鎖機(jī)制影響)


5.png

提交事物、


3.png

使用共享鎖響應(yīng)數(shù)據(jù)、


4.png

排它鎖:

開啟


1.png

查詢數(shù)據(jù)、還是之前得數(shù)字


2.png

提交
3.png

繼續(xù)查詢 修改完成


4.png
SET AUTOCOMMIT = 0   設(shè)置不自動(dòng)提交
 
BEGIN        開啟事務(wù)

SELECT * FROM ceshi WHERE ceshi_id =2 FOR UPDATE  排他鎖

UPDATE ceshi SET NAMES = "67" WHERE ceshi_id = 2;  修改

SAVEPOINT adqoo_1    做事務(wù)標(biāo)記

UPDATE ceshi SET NAMES = "8" WHERE ceshi_id = 2;

SAVEPOINT adqoo_2

UPDATE ceshi SET NAMES = "9" WHERE ceshi_id = 2;

SAVEPOINT adqoo_3

ROLLBACK TO SAVEPOINT adqoo_3   回到那個(gè)事務(wù)標(biāo)記


COMMIT  提交

最后說(shuō)一下 在mysql InnoDb引擎中update,delete,insert語(yǔ)句自動(dòng)加排他鎖 只有 select 需要手動(dòng)加鎖

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

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