【引子】

  从事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. JAVA设计模式——第 1 章 策略模式【Strategy Pattern】(转)

    刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子的. 先说这个场景 ...

  2. VB操作EXCEL文件大全

    Private Sub writeToExcel(strTmp1() As String, colTmp1 As Collection)'' Dim tmp1 Dim i1 As Integer, i ...

  3. npm 主要命令

    本文主要参考自:http://www.runoob.com/nodejs/nodejs-npm.html 1.使用 npm 命令安装模块 $ npm install express var expre ...

  4. java 八种基本数据类型之与对应的封装类之间的相互转化

      迁移时间--2017年5月26日17:47:37 Author:Marydon 一.java数据类型之基本数据类型 UpdateTime--2017年1月9日17:31:14 (三)格式转换 1. ...

  5. [Nginx]用Nginx实现与应用结合的訪问控制 - 防盗链

    应用场景:图片等资源须要设置权限,如:仅仅有认证过的用户才干訪问自己的图片. 解决的方法:使用Nginx的防盗链模块http_secure_link能够实现,该模块默认情况下不包括.故在安装时要加上- ...

  6. http://blog.csdn.net/u011277123/article/details/53665302

    导读:Oracle中,除Exp命令可进行一般的全库.全用户导出外,还可通过增加相关参数条件实现对部分库表或数据的导出. 测试环境 在如下图的测试环境中,当前登录用户名为“jck”,该用户下有200多张 ...

  7. OSWorkFlow 学习

    1.OSWorkFlow基本概念 在商用和开源世界里,OSWorkflow 都不同于这些已有的工作流系统.最大不同在于 OSWorkflow 有着非常优秀的灵活性.在开始 接触 OSWorkflow  ...

  8. windows用户态程序的Dump

    熟悉Linux的开发人员都知道,在Linux下开发程序,如果程序崩溃了,可以通过配置Core Dump,来让程序崩溃的瞬间产生一个Dump文件,然后通过dump文件来调试程序为什么崩溃.但是windo ...

  9. shell 脚本启动spring boot的jar 包

    #!/bin/bash # kill java进程 java_sso_prod_pid=`ps aux|grep sso.jar|grep -v "grep"|awk '{prin ...

  10. [转载]eclipse自动同步插件filesync的使用

    原文地址:eclipse自动同步插件filesync的使用作者:老孙丢了金箍棒    这篇文章和之前我写的<eclipse下自动部署WEB项目>根本目的是一样的,只是达到目的的方式不同. ...