当MySQL中出现死锁时,InnoDB存储引擎的默认行为是回滚一个事务,从而释放死锁。InnoDB存储引擎检测到死锁后,会选择一个事务进行回滚,比如线程1的事务,然后线程2的事务可以继续执行。
MySQL死锁代码示列:
sql
# 线程1
START TRANSACTION;
UPDATE table1 SET col = 1 WHERE id = 1;
# 等待线程2释放锁
# 线程2
START TRANSACTION;
UPDATE table1 SET col = 1 WHERE id = 2;
# 等待线程1释放锁
# 死锁产生,线程1等待线程2,线程2等待线程1
线程1会收到类似如下错误代码:
Deadlock found when trying to get lock; try restarting transaction
//提示发现死锁,事务被回滚。
MySQL死锁的四个必要条件:
1、互斥:一个资源一次只能被一个事务使用。
2、请求并保持:一个事务已经保持了一个资源,并请求一个新的资源。
3、不可剥夺:在交易没有被自愿释放的情况下,持有的资源不能被其他交易强行拿走。
4、循环等待:在两个或多个事务之间形成一个等待链。
避免僵局的措施:
1、确保所有事务以相同的顺序请求锁。
2、避免一个事务请求其他事务持有的锁。
3、锁定时间越短越好。
4、尽量避免更新多个表的语句,可以拆分成多个语句分别更新。
以上是编程学习网小编为您介绍的“MySQL如何处理死锁?MySQL死锁是怎么形成的?”的全面内容,想了解更多关于 mysql 内容,请继续关注编程基础学习网。
织梦狗教程
本文标题为:MySQL如何处理死锁?MySQL死锁是怎么形成的?


基础教程推荐
猜你喜欢
- mysql5.6主从搭建以及不同步问题详解 2023-08-06
- CodeIgniter针对数据库的连接、配置及使用方法 2023-12-15
- MySQL 百万级分页优化(Mysql千万级快速分页) 2023-12-18
- MySQL修改和删除触发器(DROP TRIGGER)方法详解 2024-01-31
- SQL Server多表查询优化方案集锦 2023-12-17
- oracle实现动态查询前一天早八点到当天早八点的数据功能示例 2024-01-11
- python中如何让输出不换行 2023-07-28
- Mysql怎么指定某个字符串字段前面几位排序查询 2024-03-10
- oracle中sql 正则写法详解 2023-07-24
- 一文详解如何使用Python批量拼接图片 2023-07-28