亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql 行級鎖的使用及死鎖的預(yù)防方案

 更新時間:2016年12月21日 10:04:04   作者:StudyBlog  
mysql的InnoDB,支持事務(wù)和行級鎖,可以使用行鎖來處理用戶提現(xiàn)等業(yè)務(wù)。使用mysql鎖的時候有時候會出現(xiàn)死鎖,要做好死鎖的預(yù)防。這篇文章通過實(shí)例應(yīng)用給大家講解

一、前言

    mysql的InnoDB,支持事務(wù)和行級鎖,可以使用行鎖來處理用戶提現(xiàn)等業(yè)務(wù)。使用mysql鎖的時候有時候會出現(xiàn)死鎖,要做好死鎖的預(yù)防。

二、MySQL行級鎖

    行級鎖又分共享鎖和排他鎖。

    共享鎖:

      名詞解釋:共享鎖又叫做讀鎖,所有的事務(wù)只能對其進(jìn)行讀操作不能寫操作,加上共享鎖后其他事務(wù)不能再加排他鎖了只能加行級鎖。

      用法:

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

結(jié)果集的數(shù)據(jù)都會加共享鎖

    排他鎖:

      名詞解釋:若某個事物對某一行加上了排他鎖,只能這個事務(wù)對其進(jìn)行讀寫,其他事務(wù)不能對其進(jìn)行加任何鎖,其他進(jìn)程可以讀取,不能進(jìn)行寫操作,需等待其釋放。

      用法:

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

三、實(shí)例應(yīng)用

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

    其實(shí)步驟不復(fù)雜,就是開啟事務(wù)判斷各個結(jié)果為真就提交為假就回滾。單個排他鎖沒有什么問題,當(dāng)一個表關(guān)聯(lián)到多個排他鎖的時候要注意防止發(fā)生死鎖。

四、死鎖

    `id`  主鍵索引

    `name` index 索引

    `age`  普通字段

    死鎖產(chǎn)生的根本原因是兩個以上的進(jìn)程都要求對方釋放資源,以至于進(jìn)程都一直等待。在代碼上是因?yàn)閮蓚€或者以上的事務(wù)都要求另一個釋放資源。

    死鎖產(chǎn)生的四個必要條件:互斥條件、環(huán)路條件、請求保持、不可剝奪,缺一不可,相對應(yīng)的只要破壞其中一種條件死鎖就不會產(chǎn)生。

    例如下面兩條語句 第一條語句會優(yōu)先使用`name`索引,因?yàn)閚ame不是主鍵索引,還會用到主鍵索引

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

    解決方法:改造第一條語句 使其根據(jù)主鍵值進(jìn)行更新

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

相關(guān)文章

  • 一文說透什么是MySQL的預(yù)編譯

    一文說透什么是MySQL的預(yù)編譯

    這篇文章主要介紹了一文說透什么是MySQL的預(yù)編譯,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)

    mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)

    MySQL 中的 FIND_IN_SET 函數(shù)用于在逗號分隔的字符串列表中查找指定字符串的位置,本文就來介紹一下mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)
    2024-08-08
  • Mysql安裝注意事項(xiàng)、安裝失敗的五個原因分析

    Mysql安裝注意事項(xiàng)、安裝失敗的五個原因分析

    這篇文章主要介紹了Mysql安裝注意事項(xiàng)、安裝失敗的五個原因分析,需要的朋友可以參考下
    2016-04-04
  • mysql百萬數(shù)據(jù)表加索引優(yōu)化的方法

    mysql百萬數(shù)據(jù)表加索引優(yōu)化的方法

    在大數(shù)據(jù)時代,隨著數(shù)據(jù)量的快速增長,對數(shù)據(jù)庫的索引優(yōu)化變得尤為重要,本文主要介紹了mysql百萬數(shù)據(jù)表加索引優(yōu)化的方法,感興趣的可以了解一下
    2024-02-02
  • MYSQL存儲過程 注釋詳解

    MYSQL存儲過程 注釋詳解

    這篇文章主要介紹MYSQL存儲的過程,本文圍繞MYSQL存儲詳細(xì)展開文章內(nèi)容,并附上詳細(xì)代碼解析,需要的下伙伴可以參考一下,希望對你有所幫助
    2021-10-10
  • MySQL8.0.20壓縮版本安裝教程圖文詳解

    MySQL8.0.20壓縮版本安裝教程圖文詳解

    這篇文章主要介紹了MySQL8.0.20壓縮版本安裝教程,需本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,要的朋友可以參考下
    2020-08-08
  • PHP MySQL的安裝與配置詳解

    PHP MySQL的安裝與配置詳解

    本篇文章給大家介紹php mysql的安裝與配置,首先給大家介紹安裝配置php,接著介紹配置mysql、安裝mysql,本文介紹的非常詳細(xì),需要的朋友可以參考下
    2015-10-10
  • mysql 添加索引的實(shí)現(xiàn)步驟

    mysql 添加索引的實(shí)現(xiàn)步驟

    索引是一種用于提高查詢效率的數(shù)據(jù)結(jié)構(gòu),通過添加索引,可以加快數(shù)據(jù)的查找速度,本文主要介紹了mysql 添加索引的實(shí)現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • 兩種方法實(shí)現(xiàn)mysql分組計(jì)數(shù),范圍匯總

    兩種方法實(shí)現(xiàn)mysql分組計(jì)數(shù),范圍匯總

    這篇文章主要介紹了兩種方法實(shí)現(xiàn)mysql分組計(jì)數(shù),范圍匯總,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • MySQL避免插入重復(fù)記錄的方法

    MySQL避免插入重復(fù)記錄的方法

    這篇文章主要介紹了MySQL避免插入重復(fù)記錄的方法,需要的朋友可以參考下
    2023-10-10

最新評論