博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写一个Mysql死锁的例子
阅读量:5793 次
发布时间:2019-06-18

本文共 822 字,大约阅读时间需要 2 分钟。

hot3.png

创建表

CREATE TABLE `test1` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(10) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

 

终端1

--T1时刻BEGIN;--行级锁 id=1 的记录select * from test1 where id=1 for update ;--T3时刻--更新 id=2 的记录update test1 set id=id where id=2;

 

终端2

--T2时刻BEGIN;--行级锁 id=2 的记录select * from test1 where id=2 for update ;--T4时刻--更新 id=1 的记录update test1 set id=id where id=1;

 

运行结果

update test1 set id=id where id=1> 1213 - Deadlock found when trying to get lock; try restarting transaction> 时间: 0.002s

 

分析

终端一在T1时刻 test1 表的id=1的记录加了排它锁

终端二在T2时刻 test1 表的id=2的记录加了排它锁

终端一在T3时刻要去更新test1表中id=2的记录,此时该行记录已经加了排它锁,无法进行更新操作,需要等待锁释放

终端二在T4时刻要去更新test1表中id=1的记录,此时该行记录已经加了排它锁,无法进行更新操作,需要等待锁释放

.....

这两个事务相互等待对方的排它锁释放,如此出现了死锁

 

如果不明白,参考我的文章  

转载于:https://my.oschina.net/u/3387320/blog/3053692

你可能感兴趣的文章
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>
C++ 代码风格准则:POD
查看>>
linux-友好显示文件大小
查看>>
【转】【WPF】WPF中MeasureOverride ArrangeOverride 的理解
查看>>
【转】二叉树的非递归遍历
查看>>
NYOJ283对称排序
查看>>
接连遇到大牛
查看>>
[Cocos2d-x For WP8]矩形碰撞检测
查看>>
自己写spring boot starter
查看>>
花钱删不完负面消息
查看>>
JBPM之JPdl小叙
查看>>