欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)生死鎖的條件進(jì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ā)讀寫相同行,會由于加鎖時機(jī)的不同而造成死鎖,導(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 decimal unsigned更新負(fù)數(shù)轉(zhuǎn)化為0

    MySQL decimal unsigned更新負(fù)數(shù)轉(zhuǎn)化為0

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

    淺析MySQL顯式類型轉(zhuǎn)換

    這篇文章主要介紹了MySQL顯式類型轉(zhuǎn)換的基礎(chǔ)知識,通過實(shí)例給出了分析結(jié)果,一起學(xué)習(xí)下吧。
    2017-12-12
  • 如何添加一個mysql用戶并給予權(quán)限詳解

    如何添加一個mysql用戶并給予權(quán)限詳解

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

    MySQL中的臨時表與內(nèi)存表

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

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

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

    MySQL數(shù)據(jù)類型enum?枚舉類型

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

    快速學(xué)習(xí)MySQL索引的入門超級教程

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

    Java連接MySql的詳細(xì)介紹

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

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

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

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

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

最新評論