【引子】

  从事MySQL-DBA这一行也有些年头了,想对新人说,在分析死锁问题时应该还要考虑到有一个叫请求队列的“概念”。之所以

  在这里提这个不是因为新手不知道,而是有时候会自然而然的想不到。

  不信的话,我下面要说的这个例子每个dba都知道要排队

  session A

creat table t(x int primary key);
insert into t(x) values(1); start transaction;
update t set x=2 where x=1;

  session B

update t set x=3 where x=1;

  由于session A持有着x=1那一行的“X”锁,所以当session B要去更新x=1这一行时它就只能是等待了,此时如果有session C它也要去更新

  x=1的行,那么session C的获取锁的请求就要排在session B的后面。

【样例一】

  session A

create table t(id int primary key);

insert into t(id) values(1);

start transaction;

select * from t where id=1 for share;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)

  session B

update t set id=1 where id=1;

  session C

update t set id=1 where id=1;

由于session A已经持有id=1这一行记录的“S”锁,所以session B 和session C都要等待,还要知道另一件事就是session B的等待请求排在session C

前面,也就是说要想session C能得到锁,它要等session B用完了之后才能拿到,然而session B要等session A用完之后它才可能拿到。

有没有想到一个问题,如果这个上时候session A再去请求id=1这一行上的“X”锁,然而这把锁永远都不可能得到了,原因是session A的“X”锁请求

排在了session C的后面,seesion C要能得到锁的关键是session 释放“S”让session B得以进行;但是session A还没有到释放“S”锁的阶段

所以死锁就产生了。

看下面的操作

  session A

update t set id=1 where id=1;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 0

  session B

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

  session C

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

可以看到为了解除死锁mysql 把session B 和session C 给干掉了

未完 ... ...

----

MySQL 两个死锁样例的更多相关文章

  1. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  2. Sakila——MySQL样例数据库解析(已经迁移)

    一.Introduction Sakila可以作为数据库设计的参考,也可作为实验数据.我是用作数据仓库和ODI学习的实验数据. The Sakila sample database was devel ...

  3. 《MySQL必知必会》学习笔记——附录B 样例表

    附录B 样例表 本附录简要描述本书中所用的表及它们的用途. 编写SQL语句需要对基础数据库的设计有良好的理解.不知道什么信息存储在什么表中,表之间如何关联以及行内数据如何分解,是不可能编写出高效的SQ ...

  4. mysql样例数据库employees

    Oracle和sqlserver都有基于员工信息的样例数据库,同样mysql上也是有的. 给出一个连接地址https://github.com/datacharmer/test_db. 下载后直接调用 ...

  5. docker-compose.yml样例(mysql主从+mycat读写分离)

    Docker-compose.yml文件示例 1.mysql主从复制的docker-compose.yml文件 # cat docker-compose.yml version: '2' # 这个ve ...

  6. myloader恢复mysql数据库演示样例

     mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具.备份方式为逻辑备份.它支持多线程.备份速度远高于原生态的mysqldump以及众多优异特性.与其相配套的恢复工具则是mylo ...

  7. MySql的事务操作与演示样例

    事务就是一个逻辑工作单元的一系列步骤. 事务是用来保证数据操作的安全性 事务的特征: Atomicity(原子性) Consistency(稳定性,一致性) Isolation(隔离性) Durabi ...

  8. Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ClamReason/article/details/23971805 首先重点推荐介绍otl介绍及使 ...

  9. Jmeter 样例 之 JDBC请求-操作MySql数据库

    准备: 1.MySql的驱动jar包:mysql-connector-java-5.1.28.jar, 2.jmeter安装目录中修改编码格式:\bin\jmeter.properties   :sa ...

随机推荐

  1. GDB 反向调试(Reverse Debugging)

    这个挺有意思 http://blog.csdn.net/CherylNatsu/article/details/6436570 使用调试器时最常用的功能就是step, next, continue,这 ...

  2. Webwork【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  3. libvlc_new 调用产生段错误

    在调试程序的时候,碰到一个奇怪的段错误问题.只要链接的时候使用-Wl,-rpath=./vlc/lib就会产生段错误,如果链接的时候使用的是-Wl,-rpath=../../tool/vlc/lib则 ...

  4. 六大主流开源SQL引擎总结

    本文涵盖了6个开源领导者:Hive.Impala.Spark SQL.Drill.HAWQ 以及Presto,还加上Calcite.Kylin.Phoenix.Tajo 和Trafodion.以及2个 ...

  5. Android 控件进阶修炼-仿360手机卫士波浪球进度控件

    技术:Android+java   概述 像360卫士的波浪球进度的效果,一般最常用的方法就是 画线的方式,先绘sin线或贝塞尔曲线,然后从左到右绘制竖线,然后再裁剪圆区域. 今天我这用图片bitma ...

  6. java服务端微信小程序支付

    发布时间:2018-10-05   技术:springboot+maven   概述 java微信小程序demo支付只需配置支付一下参数即可运行 详细 代码下载:http://www.demodash ...

  7. Java Exceptions

    invalid end header( bad central directory size) 异常描述 java.util.zip.ZipException: invalid END header ...

  8. Debug 路漫漫-04

    1.错误使用 cat 要串联的数组的维度不一致. ——前面给个初始化即可: D = cell(length(trainIdx),1); user_itemData = cell(length(trai ...

  9. JavaScript 错误处理, Throw、Try 和 Catch入门

    try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 错误一定会发生 当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误: 可能是 ...

  10. 老男孩linux实训学生入学资格考试题(技术部分)

    ################################################################ 本文内容摘录于老男孩linux实战运维培训中心入学考试题(答案部分) ...