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

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

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

死鎖的產生條件

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

MySQL鎖類型

在這里插入圖片描述

死鎖復現

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

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

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

select @@tx_isolation;

在這里插入圖片描述

預先插入兩條數據

idsongIdweight
11030
22030

在這里插入圖片描述

關閉事務自動提交:

select @@autocommit;
set autocommit=0;

在這里插入圖片描述

死鎖場景一:

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

## 事務一
# 第一步執(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;

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

死鎖場景二:

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

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

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

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

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

避免死鎖

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

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

相關文章

  • MySQL decimal unsigned更新負數轉化為0

    MySQL decimal unsigned更新負數轉化為0

    這篇文章主要介紹了MySQL decimal unsigned更新負數轉化為0,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • 淺析MySQL顯式類型轉換

    淺析MySQL顯式類型轉換

    這篇文章主要介紹了MySQL顯式類型轉換的基礎知識,通過實例給出了分析結果,一起學習下吧。
    2017-12-12
  • 如何添加一個mysql用戶并給予權限詳解

    如何添加一個mysql用戶并給予權限詳解

    在很多時候我們并不會直接利用mysql的root用戶進行項目的開發(fā),一般我們都會創(chuàng)建一個具有部分權限的用戶,下面這篇文章主要給大家介紹了關于如何添加一個mysql用戶并給予權限的相關資料,需要的朋友可以參考下
    2023-03-03
  • MySQL中的臨時表與內存表

    MySQL中的臨時表與內存表

    這篇文章主要介紹了MySQL中的臨時表與內存表,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 提升MYSQL查詢效率的10個SQL語句優(yōu)化技巧

    提升MYSQL查詢效率的10個SQL語句優(yōu)化技巧

    MySQL數據庫執(zhí)行效率對程序的執(zhí)行速度有很大的影響,有效的處理優(yōu)化數據庫是非常有用的。尤其是大量數據需要處理的時候
    2018-03-03
  • MySQL數據類型enum?枚舉類型

    MySQL數據類型enum?枚舉類型

    這篇文章主要介紹了MySQL數據類型enum?枚舉類型,文章圍繞主題展開詳細的內容介紹,需要的小伙伴可以參考一下
    2022-06-06
  • 快速學習MySQL索引的入門超級教程

    快速學習MySQL索引的入門超級教程

    這篇文章主要介紹了快速學習MySQL索引的入門教程,包括索引的創(chuàng)建和刪除等基礎知識,需要的朋友可以參考下
    2015-11-11
  • Java連接MySql的詳細介紹

    Java連接MySql的詳細介紹

    本篇文章主要是對Java連接MySql的詳細介紹。需要的朋友參考下
    2013-04-04
  • Windows系統(tǒng)下MySQL無法啟動的萬能解決方法

    Windows系統(tǒng)下MySQL無法啟動的萬能解決方法

    這篇文章主要給大家介紹了關于Windows系統(tǒng)下MySQL無法啟動的萬能解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 圖解MySQL中樂觀鎖扣減庫存原理

    圖解MySQL中樂觀鎖扣減庫存原理

    這篇文章主要為大家詳細介紹了MySQL中樂觀鎖扣減庫存原理的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04

最新評論