最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql5.7并發(fā)插入死鎖問題解決

 更新時間:2024年09月09日 11:31:48   作者:coding喵  
死鎖是數(shù)據(jù)庫并發(fā)控制中的一種現(xiàn)象,它涉及多個事務(wù)在執(zhí)行過程中相互等待對方占有的資源,導(dǎo)致無法繼續(xù)執(zhí)行,本文就來介紹一下Mysql5.7并發(fā)插入死鎖問題解決,感興趣的可以了解一下

死鎖的產(chǎn)生條件

互斥、請求和保持、不可剝奪、循環(huán)等待

MySQL鎖類型

在這里插入圖片描述

死鎖復(fù)現(xiàn)

環(huán)境:Mysql 5.7版本,Innodb引擎,可重復(fù)度隔離級別
并發(fā)場景下使用duplicate key update插入或更新數(shù)據(jù)可能會造成死鎖,下面就產(chǎn)生死鎖的條件進行模擬
表:

CREATE TABLE `song_rank` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `songId` int(11) NOT NULL,
  `weight` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `songId_idx` (`songId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8

隔離級別:可重復(fù)度(RR)

select @@tx_isolation;

在這里插入圖片描述

預(yù)先插入兩條數(shù)據(jù)

idsongIdweight
11030
22030

在這里插入圖片描述

關(guān)閉事務(wù)自動提交:

select @@autocommit;
set autocommit=0;

在這里插入圖片描述

死鎖場景一:

記錄鎖循環(huán)等待:如果兩個事務(wù)并發(fā)讀寫相同行,會由于加鎖時機的不同而造成死鎖,導(dǎo)致其中一個事務(wù)執(zhí)行失?。╩ysql可以配置自動檢測死鎖然后自動斷開其中一個innodb_deadlock_detect)

## 事務(wù)一
# 第一步執(zhí)行
begin;
insert into  song_rank(songId,weight) values(17,100) on duplicate key update  weight=weight+1;
# 第三步執(zhí)行
insert into  song_rank(songId,weight) values(16,100) on duplicate key update  weight=weight+1;

## 事務(wù)二
# 第二步執(zhí)行
begin;
insert into  song_rank(songId,weight) values(16,100) on duplicate key update  weight=weight+1;
# 第四步執(zhí)行
insert into  song_rank(songId,weight) values(17,100) on duplicate key update  weight=weight+1;
執(zhí)行步驟事務(wù)一事務(wù)二鎖狀態(tài)
第一步begin; insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1;事務(wù)一對17新增記錄鎖
第二步begin;insert into song_rank(songId,weight) values(16,100) on duplicate key update weight=weight+1;事務(wù)二對16新增記錄鎖
第三步insert into song_rank(songId,weight) values(16,100) on duplicate key update weight=weight+1;事務(wù)一等待事務(wù)二釋放16的記錄鎖
第四步insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1;事務(wù)二等待事務(wù)一釋放17的記錄鎖,出現(xiàn)死鎖

死鎖場景二:

記錄鎖、間隙鎖循環(huán)等待:在并發(fā)插入、更新同一條數(shù)據(jù)時,一個事務(wù)獲取了記錄鎖,一個事務(wù)在等待記錄排他鎖,則事務(wù)在執(zhí)行插入獲取間隙鎖是會造成死鎖。

# 事務(wù)一
# 第一步執(zhí)行
begin;
insert into  song_rank(songId,weight) values(17,100) on duplicate key update  weight=weight+1;
# 第四步執(zhí)行
rollback;

# 事務(wù)二
# 第二步執(zhí)行
begin;
insert into  song_rank(songId,weight) values(17,100) on duplicate key update  weight=weight+1;

# 事務(wù)三
# 第三步執(zhí)行
begin;
insert into  song_rank(songId,weight) values(17,100) on duplicate key update  weight=weight+1;
# 出現(xiàn)死鎖

執(zhí)行步驟事務(wù)一事務(wù)二事務(wù)三鎖狀態(tài)
第一步begin; insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1;事務(wù)一對17新增記錄鎖
第二步begin;insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1;事務(wù)二等待17記錄鎖
第三步begin;insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1;事務(wù)三等待17的記錄鎖
第四步rollback;事務(wù)二獲取17記錄鎖,事務(wù)三等待17記錄鎖,事務(wù)一獲取間隙鎖時需要等待事務(wù)三釋放17記錄鎖,出現(xiàn)死鎖

避免死鎖

控制并發(fā)寫入和更新;
先執(zhí)行插入,捕獲插入異常并處理更新數(shù)據(jù);

到此這篇關(guān)于Mysql5.7并發(fā)插入死鎖問題解決的文章就介紹到這了,更多相關(guān)Mysql5.7并發(fā)插入死鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL如何刪除表中的數(shù)據(jù)

    MySQL如何刪除表中的數(shù)據(jù)

    這篇文章主要介紹了MySQL如何刪除表中的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MySQL容災(zāi)備份的實現(xiàn)方案

    MySQL容災(zāi)備份的實現(xiàn)方案

    進行MySQL的容災(zāi)備份是確保數(shù)據(jù)安全和業(yè)務(wù)連續(xù)性的關(guān)鍵步驟,容災(zāi)備份可以分為本地備份和遠程備份,主要包括邏輯備份和物理備份兩種方式,下面就來具體介紹一下
    2025-08-08
  • mySQL 8.0.33安裝指南(推薦)

    mySQL 8.0.33安裝指南(推薦)

    本文提供MySQL8.0.33的詳細安裝步驟,從解壓安裝包到設(shè)置系統(tǒng)服務(wù)、配置遠程訪問及安全設(shè)置等,包括創(chuàng)建和配置MySQL用戶,設(shè)置環(huán)境變量,初始化數(shù)據(jù)庫等關(guān)鍵操作,同時強調(diào)安全性的重要性,如設(shè)置強密碼、限制遠程訪問權(quán)限,并建議在重要操作前進行數(shù)據(jù)庫備份
    2024-10-10
  • MySQL使用MRG_MyISAM(MERGE)實現(xiàn)分表后查詢的示例

    MySQL使用MRG_MyISAM(MERGE)實現(xiàn)分表后查詢的示例

    這篇文章主要介紹了MySQL使用MRG_MyISAM(MERGE)實現(xiàn)分表后查詢的示例,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12
  • 解決phpstudy無法啟動MySQL服務(wù)的三種方法小結(jié)

    解決phpstudy無法啟動MySQL服務(wù)的三種方法小結(jié)

    本文主要介紹了光速解決phpstudy無法啟動MySQL服務(wù)的三種方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • 簡單了解 MySQL 中相關(guān)的鎖

    簡單了解 MySQL 中相關(guān)的鎖

    這篇文章主要介紹了簡單了解 MySQL 中相關(guān)的鎖,重點介紹InnoDB中的鎖相關(guān)知識,包括鎖的概念及分類解析,對MySQL鎖相關(guān)感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • 詳解windows下mysql的主從同步

    詳解windows下mysql的主從同步

    本文主要對windows下的mysql主從同步進行詳細介紹。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • mysql慢查詢使用詳解

    mysql慢查詢使用詳解

    慢查詢是我們在mysql中經(jīng)常需要使用到的一個很方便的功能,慢查詢對于跟蹤有問題的查詢很有用,可以分析出當(dāng)前程序里那些Sql語句比較耗費資源。
    2014-12-12
  • MyBatis攔截器實現(xiàn)分頁功能的實現(xiàn)方法

    MyBatis攔截器實現(xiàn)分頁功能的實現(xiàn)方法

    這篇文章主要介紹了MyBatis攔截器實現(xiàn)分頁功能的實現(xiàn)方法的相關(guān)資料,希望通過本文大家能夠?qū)崿F(xiàn)這樣的方法,需要的朋友可以參考下
    2017-10-10
  • MySQL實戰(zhàn)文章(非常全的基礎(chǔ)入門類教程)

    MySQL實戰(zhàn)文章(非常全的基礎(chǔ)入門類教程)

    半個月時間把MySQL重新鞏固了一遍,梳理了一篇幾萬字超硬核文章,想學(xué)習(xí)mysql的朋友可以看看
    2023-05-05

最新評論

丰顺县| 牡丹江市| 白沙| 华容县| 海门市| 于田县| 崇左市| 揭东县| 历史| 九龙县| 林周县| 富阳市| 巴青县| 健康| 慈溪市| 沅陵县| 乃东县| 沛县| 大方县| 望都县| 德安县| 博白县| 南充市| 夏河县| 曲阳县| 塘沽区| 富裕县| 七台河市| 镇江市| 新安县| 布拖县| 泸西县| 甘谷县| 乌鲁木齐市| 永州市| 鹤峰县| 沁阳市| 辽宁省| 莆田市| 延吉市| 建湖县|