溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql實(shí)現(xiàn)悲觀鎖的方法

發(fā)布時(shí)間:2020-06-29 16:42:43 來源:億速云 閱讀:242 作者:元一 欄目:MySQL數(shù)據(jù)庫(kù)

這期內(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è)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI