IT技術互動交流平台

mysql 行級鎖的使用以及死鎖的預防

作者_英皇娱乐时时彩平台:StudyBlog  來源-重庆艾一若厨卫电器:IT165收集  發布日期___国风商讯:2016-12-22 20:36:31

 一||_逃亡鳄鱼岛国语版、前言

    mysql的InnoDB,支持事務和行級鎖|哈雷摩托车官网,可以使用行鎖來處理用戶提現等業務_|安全生产漫画。使用mysql鎖的時候有時候會出現死鎖||-11086移动彩票网,要做好死鎖的預防|金坛零距离。

  二-_|阿玛拉王国惩罚锻造、MySQL行級鎖

    行級鎖又分共享鎖和排他鎖-|_上海一号店客服电话。

    共享鎖-_众赢国际彩票:

      名詞解釋|_编导必看电影:共享鎖又叫做讀鎖--_反间谍工作的主管单位,所有的事務隻能對其進行讀操作不能寫操作|-_汉草荟灵芝养生壶,加上共享鎖後其他事務不能再加排他鎖了隻能加行級鎖|_内蒙古马夫。

      用法-运盛娱乐app图片:SELECT `id` FROM  table WHERE id in(1,2)   LOCK IN SHARE MODE 結果集的數據都會加共享鎖

    排他鎖-盈彩网app官方下载:

      名詞解釋-|_一千个奥特曼大战一千个怪兽电影:若某個事物對某一行加上了排他鎖_--阿鲁科尔沁旗绿原网,隻能這個事務對其進行讀寫_|温州大学城市学院,其他事務不能對其進行加任何鎖_-华硕f83s,其他進程可以讀取,不能進行寫操作__10元可提现的彩票网站,需等待其釋放-好千度。

      用法|_莱州中考成绩查询:SELECT `id` FROM mk_user WHERE id=1 FOR UPDATE

  三_|qq刷钻软件免费版2013、實例應用

<?php
        $uid=$_SESSION['uid'];
        //開啟事務
        sql:begin
        //開啟行級鎖的排他鎖
        sql:SELECT `coin` FROM user WHERE id=$uid FOR UPDATE 
        //扣除用戶賬戶錢幣
        $res=update user set coin=coin-value where id=1;
        if($res){
            //將用戶的提現信息添加到提現表
            sql:insert into user values(null,'{$uid}',value);
            //判斷添加結果
            if(add_cash_result){
                sql:commit
            }else{
                sql:rollback
            }
        }else{
            sql:rollback;
        }

    其實步驟不複雜||众发娱乐是不违法,就是開啟事務判斷各個結果為真就提交為假就回滾--|联众好友在线下载。單個排他鎖沒有什麼問題-|-异蛇宝,當一個表關聯到多個排他鎖的時候要注意防止發生死鎖--_csol防沉迷。

  四_|众盈彩票是不是真的、死鎖

    `id`  主鍵索引

    `name` index 索引

    `age`  普通字段

    死鎖產生的根本原因是兩個以上的進程都要求對方釋放資源|-孙继发豆芽机,以至於進程都一直等待||沈阳市财政局财会之窗。在代碼上是因為兩個或者以上的事務都要求另一個釋放資源-_蕉岭网。

    死鎖產生的四個必要條件-_殷世航:互斥條件_|索爱w750、環路條件|--众乐彩票线路导航、請求保持_||手机qq2009下载、不可剝奪_|_袁成杰包子铺,缺一不可_大象网,相對應的隻要破壞其中一種條件死鎖就不會產生-_贺岁电影。

    例如下麵兩條語句 第一條語句會優先使用`name`索引_-众赢国际是干什么的,因為name不是主鍵索引--_考好老师让你做一次H,還會用到主鍵索引

    第二條語句是首先使用主鍵索引,再使用name索引 如果兩條語句同時執行-|众博彩票是骗局吗,第一條語句執行了name索引等待第二條釋放主鍵索引_||朗姿代购,第二條執行了主鍵索引等待第一條的name索引--赢咖娱乐平台登录,這樣就造成了死鎖-__至尊娱乐腾讯分分彩。

    解決方法__1216网彩可信吗:改造第一條語句 使其根據主鍵值進行更新
    

#①
update mk_user set name ='1' where `name`='idis12';
#②
update mk_user set name='12'  where id=12;
//改造後
update mk_user set name='1' where id=(select id from mk_user where name='idis12' );

  

延伸閱讀_|众赢国际app是真的吗:

Tag標簽|-陈卫生: 死鎖  
  • 專題推薦

  • Directx11 遊戲編程入門教程
  • 專題主要學習DirectX的初級編程入門學習陈氏太极拳教程,對Directx11的入門及初學者有...... 詳細
  • Windows7係統入門 優化 技巧技術專題
  • Windows7係統專題 無論是升級操作係統_河南m值兑换、資料備份--优衣库11分24秒视频、加強資料的安全及管...... 詳細
About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯係方式
本站內容來自於互聯網,僅供用於網絡技術學習,學習中請遵循相關法律法規
天天彩票国民彩票运盛彩票江苏快三秒速时时彩盈众彩票

免责声明: 本站资料及图片来源互联网文章,本网不承担任何由内容信息所引起的争议和法律责任。所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!