好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Mysql 行級鎖的使用及死鎖的預防方案

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

熱門標簽:沈陽智能外呼系統供應商 地圖簡圖標注 南通電銷外呼系統哪家強 桂林云電銷機器人收費 如何選擇優質的外呼系統 東莞外呼企業管理系統 谷歌地圖標注位置圖解 手機外呼系統違法嗎 清遠申請400電話

一、前言

    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 行級鎖的使用及死鎖的預防解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • 詳解MySQL中的死鎖情況以及對死鎖的處理方法
  • 一次Mysql死鎖排查過程的全紀錄
  • mysql 數據庫死鎖原因及解決辦法
  • MySQL死鎖問題分析及解決方法實例詳解
  • 查找MySQL線程中死鎖的ID的方法
  • Mysql 數據庫死鎖過程分析(select for update)
  • 詳解MySQL(InnoDB)是如何處理死鎖的
  • MySQL數據庫的一次死鎖實例分析
  • 通過唯一索引S鎖與X鎖來了解MySQL死鎖套路
  • Mysql查看死鎖與解除死鎖的深入講解

標簽:貴州 重慶 天津 內蒙古 湖州 成都 常德 臨沂

巨人網絡通訊聲明:本文標題《Mysql 行級鎖的使用及死鎖的預防方案》,本文關鍵詞  Mysql,行級,鎖,的,使用,及,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql 行級鎖的使用及死鎖的預防方案》相關的同類信息!
  • 本頁收集關于Mysql 行級鎖的使用及死鎖的預防方案的相關信息資訊供網民參考!
  • 推薦文章