Mysql 行級鎖的使用及死結的預防方案_Mysql

來源:互聯網
上載者:User

一、前言

    mysql的InnoDB,支援事務和行級鎖,可以使用行鎖來處理使用者提現等業務。使用mysql鎖的時候有時候會出現死結,要做好死結的預防。

二、MySQL行級鎖

    行級鎖又分共用鎖定和獨佔鎖定。

    共用鎖定:

      名詞解釋:共用鎖定又叫做讀鎖,所有的事務只能對其進行讀操作不能寫操作,加上共用鎖定後其他事務不能再加獨佔鎖定了只能加行級鎖。

      用法:

SELECT `id` FROM table WHERE id in(1,2)  LOCK IN SHARE MODE 

結果集的資料都會加共用鎖定

    獨佔鎖定:

      名詞解釋:若某個事物對某一行加上了獨佔鎖定,只能這個事務對其進行讀寫,其他事務不能對其進行加任何鎖,其他進程可以讀取,不能進行寫操作,需等待其釋放。

      用法:

SELECT `id` FROM mk_user WHERE id=1 FOR UPDATE

三、執行個體應用

<?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;  }

    其實步驟不複雜,就是開啟事務判斷各個結果為真就提交為假就復原。單個獨佔鎖定沒有什麼問題,當一個表關聯到多個獨佔鎖定的時候要注意防止發生死結。

四、死結

    `id`  主鍵索引

    `name` index 索引

    `age`  普通欄位

    死結產生的根本原因是兩個以上的進程都要求對方釋放資源,以至於進程都一直等待。在代碼上是因為兩個或者以上的事務都要求另一個釋放資源。

    死結產生的四個必要條件:互斥條件、環路條件、請求保持、不可剝奪,缺一不可,相對應的只要破壞其中一種條件死結就不會產生。

    例如下面兩條語句 第一條語句會優先使用`name`索引,因為name不是主鍵索引,還會用到主鍵索引

    第二條語句是首先使用主鍵索引,再使用name索引 如果兩條語句同時執行,第一條語句執行了name索引等待第二條釋放主鍵索引,第二條執行了主鍵索引等待第一條的name索引,這樣就造成了死結。

    解決方案:改造第一條語句 使其根據主索引值進行更新

#①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' );

以上所述是小編給大家介紹的Mysql 行級鎖的使用及死結的預防解決方案,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.