<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
線上有個批次的insert … on duplicate key update語句引發的死鎖問題,查過很多資料並且親自嘗試過後,發現好多部落格說的都是錯的,其實本身只跟insert的順序有關,在此記錄一下備忘。
X型鎖:排他鎖
S型鎖:共用鎖
行鎖:鎖住一行記錄
Next-Key鎖:左開右閉區間
Gap鎖:左右開區間
建表:
CREATE TABLE hero ( number INT AUTO_INCREMENT, name VARCHAR(100), country varchar(100), PRIMARY KEY (number), UNIQUE KEY uk_name (name) ) Engine=InnoDB CHARSET=utf8;
構造初始資料:
INSERT INTO hero VALUES (1, 'l劉備', '蜀'), (3, 'z諸葛亮', '蜀'), (8, 'c曹操', '魏'), (15, 'x荀彧', '魏'), (20, 's孫權', '吳');
好了,開始了,下面開始兩個事務,按順序執行:
事務1
begin: INSERT INTO hero(name, country) VALUES('g關羽', '蜀');
事務2
begin: INSERT INTO hero(name, country) VALUES('g關羽', '蜀');
事務1
INSERT INTO hero(name, country) VALUES('d鄧艾', '魏');
來了,它來了,這個時候我們就可以注意到事務2的死鎖報錯了:
# 事務T2 mysql> INSERT INTO hero(name, country) VALUES('g關羽', '蜀'); ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
在比較新的版本中都可以遇見的,只要是insert … on duplicate key update 觸發了後面的update操作,那麼此時其他的insert語句都會被阻塞,這主要是為了解決RR下的一些幻讀問題。
在5.7版本中又有一些特殊情況。還是舉例
假如有如下表和資料
demo表
id | name | value |
---|---|---|
1 | 111 | 2 |
1 | 222 | 2 |
1 | 333 | 2 |
此時,如果事務1執行了:
insert into demo (name, value) VALUES ("333", 1) ON duplicate KEY UPDATE value = value + 1;
事務2執行了:
insert into demo (name, value) VALUES ("223", 1) ON duplicate KEY UPDATE value = value + 1;
事務3執行了:
insert into demo (name, value) VALUES ("224", 1) ON duplicate KEY UPDATE value = value + 1;
那麼首先事務2和事務3會被阻塞,然後事務1提交了,事務2和事務3就會發生死鎖,其中一個爆出死鎖的錯誤然後失敗,另一個則成功執行。
當insert … on duplicate key 執行成功之時,會在當前唯一鍵和之前唯一鍵之間加一個隱式GAP鎖,如上會在222和333之間加上GAP鎖,此時,事務2和事務3想插入新資料都會被GAP鎖阻塞,此時GAP鎖轉為顯式,事務2和事務3同時也分別想要獲取X型的插入意向鎖。
然後事務1提交,此時GAP鎖並不會被釋放,由於5.7的bug,事務2和事務3都會拿到GAP鎖,此時他們去獲取插入意向鎖的時候由於GAP鎖被對方拿到而矛盾,進而死鎖。
網上有很多方法,這裡我提出一個另類的想法。
我們可以先用非事務的insert ignore去初始化資料,後面在用事務的update操作去更新。
參考:https://zhuanlan.zhihu.com/p/457191971
到此這篇關於MySQL insert死鎖問題的文章就介紹到這了,更多相關MySQL insert死鎖問題內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45