關(guān)于mysql事務(wù)行鎖forupdate實(shí)現(xiàn)寫鎖的功能_MySQL
來(lái)源:懂視網(wǎng)
責(zé)編:小采
時(shí)間:2020-11-09 19:09:12
關(guān)于mysql事務(wù)行鎖forupdate實(shí)現(xiàn)寫鎖的功能_MySQL
關(guān)于mysql事務(wù)行鎖forupdate實(shí)現(xiàn)寫鎖的功能_MySQL:在電子商務(wù)里,經(jīng)常會(huì)出現(xiàn)庫(kù)存數(shù)量少,購(gòu)買的人又特別多,大并發(fā)情況下如何確保商品數(shù)量不會(huì)被多次購(gòu)買.其實(shí)很簡(jiǎn)單,利用事務(wù)+for update就可以解決.我們都知道for update實(shí)際上是共享鎖,是可以被讀取的.但是如何在執(zhí)行時(shí),不被讀取呢.簡(jiǎn)單來(lái)說(shuō):假設(shè)現(xiàn)在庫(kù)存
導(dǎo)讀關(guān)于mysql事務(wù)行鎖forupdate實(shí)現(xiàn)寫鎖的功能_MySQL:在電子商務(wù)里,經(jīng)常會(huì)出現(xiàn)庫(kù)存數(shù)量少,購(gòu)買的人又特別多,大并發(fā)情況下如何確保商品數(shù)量不會(huì)被多次購(gòu)買.其實(shí)很簡(jiǎn)單,利用事務(wù)+for update就可以解決.我們都知道for update實(shí)際上是共享鎖,是可以被讀取的.但是如何在執(zhí)行時(shí),不被讀取呢.簡(jiǎn)單來(lái)說(shuō):假設(shè)現(xiàn)在庫(kù)存

在電子商務(wù)里,經(jīng)常會(huì)出現(xiàn)庫(kù)存數(shù)量少,購(gòu)買的人又特別多,大并發(fā)情況下如何確保商品數(shù)量不會(huì)被多次購(gòu)買.
其實(shí)很簡(jiǎn)單,利用事務(wù)+for update就可以解決.
我們都知道for update實(shí)際上是共享鎖,是可以被讀取的.但是如何在執(zhí)行時(shí),不被讀取呢.
簡(jiǎn)單來(lái)說(shuō):假設(shè)現(xiàn)在庫(kù)存為1,現(xiàn)在有A和B同時(shí)購(gòu)買
先開啟一個(gè)事務(wù)
begin;
select stock from good where id=1 for update;//查詢good表某個(gè)商品中stock的數(shù)量
查出來(lái)后,在程序里在判斷這個(gè)stock是否為0(你用什么語(yǔ)言,不關(guān)我事)
最后在執(zhí)行
update good set stock=stock-1 where id=1
最后在
commit
但是這個(gè)時(shí)候B也是select stock from good where id=1 for update;注意:for update不能省略..這個(gè)時(shí)候會(huì)出現(xiàn)被鎖住,無(wú)法被讀取.
所以這就能夠保證了商品剩余數(shù)量為1的一致性.
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
關(guān)于mysql事務(wù)行鎖forupdate實(shí)現(xiàn)寫鎖的功能_MySQL
關(guān)于mysql事務(wù)行鎖forupdate實(shí)現(xiàn)寫鎖的功能_MySQL:在電子商務(wù)里,經(jīng)常會(huì)出現(xiàn)庫(kù)存數(shù)量少,購(gòu)買的人又特別多,大并發(fā)情況下如何確保商品數(shù)量不會(huì)被多次購(gòu)買.其實(shí)很簡(jiǎn)單,利用事務(wù)+for update就可以解決.我們都知道for update實(shí)際上是共享鎖,是可以被讀取的.但是如何在執(zhí)行時(shí),不被讀取呢.簡(jiǎn)單來(lái)說(shuō):假設(shè)現(xiàn)在庫(kù)存