mysql 死锁的演示

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 前言:出于兴趣,特地模拟了一下mysql死锁的产生的场景。   一、环境准备 在test数据库下面创建一个表t1 mysql> CREATE TABLE t1 (       ->    a int(11) NOT NULL DEFAULT '0',   ...

前言:出于兴趣,特地模拟了一下mysql死锁的产生的场景。

 

一、环境准备

在test数据库下面创建一个表t1

mysql> CREATE TABLE t1 (  

    ->    a int(11) NOT NULL DEFAULT '0', 

    ->    PRIMARY KEY (a)

    ->    ) ENGINE=InnoDB DEFAULT CHARSET=utf8  ;

Query OK, 0 rows affected (0.02 sec)

 

二、往表中插入数据

mysql> insert into t1 values(1);

Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 values(2);

Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 values(3);

Query OK, 1 row affected (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.01 sec)

mysql> select * from t1;

+---+

| a |

+---+

| 1 |

| 2 |

| 3 |

+---+

3 rows in set (0.00 sec)

 

三、开始演示

session 1

session 2

set autocommit=0;

mysql> select * from t1 where a=1 for update;

+---+

| a |

+---+

| 1 |

+---+

1 row in set (0.00 sec)

//对行1加锁

 
 

set autocommit=0;


mysql> select * from t1 where a=2 for update;

+---+

| a |

+---+

| 2 |

+---+

1 row in set (0.01 sec)

//对行2加锁

mysql> select * from t1 where a=2 for update;

//当前状态处于锁等待状态,等待session2释放锁;

 
  mysql> select * from t1 where a=1 for update;
//等待session1释放锁

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
当前session 2被回滚了

这样session1和session2就处于相持的状态;mysql检测到两个session互为等待的情况下就会把最后一个session做了回滚操作;

 

总结:如果想要看更详细的锁状态,可以查看这三张表INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS,上面的文档还记录着,这里偷懒一下。

 

.......................................................................................................................................................................

本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 ) 

........................................................................................................................................................................

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySQL死锁及源码分析!
MySQL死锁及源码分析!
MySQL死锁及源码分析!
|
2月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
151 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
2月前
|
SQL 关系型数据库 MySQL
案例剖析,MySQL共享锁引发的死锁问题!
案例剖析,MySQL共享锁引发的死锁问题!
|
4月前
|
SQL 关系型数据库 MySQL
遇到mysql数据库死锁,你会怎么排查?
遇到mysql数据库死锁,你会怎么排查?
306 0
|
1月前
|
SQL 算法 关系型数据库
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决
|
2月前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
116 3
|
3月前
|
监控 关系型数据库 MySQL
MySQL锁机制与解决死锁问题
MySQL锁机制与解决死锁问题
326 5
|
2月前
|
监控 关系型数据库 MySQL
一次彻底讲清如何处理mysql 的死锁问题
【10月更文挑战第16天】本文详细介绍了如何处理 MySQL 中的死锁问题,涵盖死锁的概念、原因、检测方法及解决策略,强调通过优化事务设计、调整数据库参数、手动处理和预防措施等手段,有效减少死锁,提升数据库性能与稳定性。
408 0
|
4月前
|
存储 SQL 关系型数据库
深入MySQL锁机制:原理、死锁解决及Java防范技巧
深入MySQL锁机制:原理、死锁解决及Java防范技巧
|
4月前
|
SQL JavaScript 关系型数据库
Mysql索引不当引发死锁问题
本文通过真实案例解析了MySQL在高并发环境下出现死锁的问题。数据库表`t_award`包含多个索引,但在执行特定SQL语句时遭遇索引失效,导致更新操作变慢并引发死锁。分析发现,联合索引`(pool_id, identifier, status, is_redeemed)`因`identifier`允许为空值而导致索引部分失效。此外,`pool_id`上的普通索引产生的间隙锁在高并发下加剧了死锁风险。为解决此问题,文中提出了调整索引顺序至`(pool_id, status, is_redeemed, identifier)`等方案来优化索引使用,进而减轻死锁现象。