Mysql悲观锁以及乐观锁案例说明
悲觀鎖介紹:
悲觀鎖,正如其名,它指的是對數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度,因此,在整個(gè)數(shù)據(jù)處理過程中,將數(shù)據(jù)處于鎖定狀態(tài)。悲觀鎖的實(shí)現(xiàn),往往依靠數(shù)據(jù)庫提供的鎖機(jī)制(也只有數(shù)據(jù)庫層提供的鎖機(jī)制才能真正保證數(shù)據(jù)訪問的排他性,否則,即使在本系統(tǒng)中實(shí)現(xiàn)了加鎖機(jī)制,也無法保證外部系統(tǒng)不會修改數(shù)據(jù))。
使用場景舉例:以MySQL InnoDB為例
商品goods表中有一個(gè)字段status,status為1代表商品未被下單,status為2代表商品已經(jīng)被下單,那么我們對某個(gè)商品下單時(shí)必須確保該商品status為1。假設(shè)商品的id為1。
1如果不采用鎖,那么操作方法如下:
//1.查詢出商品信息select status from t_goods where id=1;//2.根據(jù)商品信息生成訂單insert into t_orders (id,goods_id) values (null,1);//3.修改商品status為2update t_goods set status=2;
上面這種場景在高并發(fā)訪問的情況下很可能會出現(xiàn)問題。
前面已經(jīng)提到,只有當(dāng)goods status為1時(shí)才能對該商品下單,上面第一步操作中,查詢出來的商品status為1。但是當(dāng)我們執(zhí)行第三步Update操作的時(shí)候,有可能出現(xiàn)其他人先一步對商品下單把goods status修改為2了
總結(jié)
以上是生活随笔為你收集整理的Mysql悲观锁以及乐观锁案例说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: docker 实现redis集群搭建
- 下一篇: Lumen框架多数据库连接配置方法
