换个角度看待MySQL死锁的一点简单认识

在MySQL锁机制的部分,一般都会提到一个所模式的兼容矩阵,看起来比较枯燥,而且不大容易理解。

那我们可以换个角度,取出其中的一个冲突场景,比如下面的场景在两个会话中,就很可能出现。

会话1,会话2都添加了S锁,然后后续的操作都相继添加X锁,明细的信息就不多说了,这种情况下很可能就会触发死锁。而这个层面其实在RR,RC中都会出现。

我们举一反三,来逐步扩展一下。我们创建一个表dt1

mysql> create table dt1 (id int unique Query OK, 0 rows affected (0.03 sec)

会话1:

begin;

select *from dt1 lock in share mode;

会话2:

begin;

select *from dt1 lock in share mode;

会话1:

insert into dt1 values(1);

会话2:

insert into dt1 values(1);

这种情况下就会触发死锁。

这个例子这样看来很简单,如果我们把这个问题复杂化一下,这个S锁可以通过其他的方式引入进来。

比如下面的场景:

会话1: begin; insert into dt1 values(1); 会话2: insert into dt1 values(1); 会话3: insert into dt1 values(1); 会话1: rollback; 感兴趣可以测试一下,按照这个思路,可以扩展出很多的死锁场景,简直就手到擒来。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

利用机器学习把草图自动生成HTML

项目地址 https://github.com/ashnkumar/sketch-code 可以先clone到本地

20520
来自专栏我的博客

Nginx搭建负载均衡

Nginx负载均衡的分发方式有4种: 1.轮询,默认采取此方式,Nginx会按照请求时间的先后顺序进行轮询分发,若某台Web Server宕机,Nginx自动将...

40650
来自专栏Jackie技术随笔

I/O复用——几种I/O模型对比

之前在服务器进程终止中讨论的情形,TCP客户端同时要处理两个输入,一是标准输入,二是TCP套接口。而此时若是服务器进程被杀死,服务器尽管正确地给客户发送了FIN...

44560
来自专栏优启梦

PHP配合javascript实现select快速设置默认值

今天在做一个select选中默认值的时候,不想用以前的老方法了,然后我就各种百度啊!

22460
来自专栏计算机视觉

ubuntu命令以及深度学习的应用好文分享

深度学习在图像处理中的应用探讨 20个令人惊叹的深度学习应用(Demo+Paper+Code) 神经网络理解和入门 推荐~~~ ubuntu命令大全 创建...

36480
来自专栏算法channel

完整教程:使用caffe测试mnist数据集

想要入门深度学习没有几个趁手的兵器是不行的,目前流行的框架tensorflow、pytorch、caffe等,笔者也是最近接触了caffe,发现caffe非常适...

21460
来自专栏技术博文

smarty模板引擎原理解析

//php 控制器文件 <?php //引入模板引擎文件 include("20130304.php"); $smarty = new TinySmarty()...

36260
来自专栏Python小屋

Python批量Excel文件数据导入SQLite数据库的优化方案

说明:1)需要安装扩展库openpyxl;2)随着数据库的增大,导入速度可能会有所下降;3)本文只考虑Python代码优化,没有涉及数据库的优化;4)本文要点在...

51170
来自专栏hotqin888的专栏

HydromCMS增加封面、完善自定义目录功能、目录结构的修改功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

13320
来自专栏电光石火

maven-source-plugin 自动将源码打包并发布

23830

扫码关注云+社区

领取腾讯云代金券