您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)mysql實(shí)現(xiàn)悲觀鎖的方法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
簡(jiǎn)介:
悲觀鎖,正如其名,具有強(qiáng)烈的獨(dú)占和排他特性。它指的是對(duì)數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度,因此,在整個(gè)數(shù)據(jù)處理過程中,將數(shù)據(jù)處于鎖定狀態(tài)。悲觀鎖的實(shí)現(xiàn),往往依靠數(shù)據(jù)庫(kù)提供的鎖機(jī)制(也只有數(shù)據(jù)庫(kù)層提供的鎖機(jī)制才能真正保證數(shù)據(jù)訪問的排他性,否則,即使在本系統(tǒng)中實(shí)現(xiàn)了加鎖機(jī)制,也無法保證外部系統(tǒng)不會(huì)修改數(shù)據(jù))。
mysql悲觀鎖的方法:
1、開始事務(wù)
begin;/begin work;/start transaction; (三者選一就可以)
2、查詢出商品信息
select status from table where id=1 for update;
3、根據(jù)商品信息生成訂單
insert into table111 (id,goods_id) values (null,1);
4、修改商品status為2
update table set status=2 where id=1;
5、提交事務(wù)
commit;/commit work; (任選一種釋放鎖)
總結(jié):
1、實(shí)現(xiàn)悲觀鎖利用select ... for update加鎖, 操作完成后使用commit來釋放鎖;
2、innodb引擎時(shí), 默認(rèn)行級(jí)鎖, 當(dāng)有明確字段時(shí)會(huì)鎖一行, 如無查詢條件或條件;
字段不明確時(shí), 會(huì)鎖整個(gè)表,條件為范圍時(shí)會(huì)鎖整個(gè)表;
3、查不到數(shù)據(jù)時(shí), 則不會(huì)鎖表。
上述就是小編為大家分享的mysql實(shí)現(xiàn)悲觀鎖的方法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。