本文摘自PHP中文网,作者醉折花枝作酒筹,侵删。
当多个事务同时持有和请求同一资源上的锁而产生循环依赖的时候就产生了死锁,解决方法为:1、用更低的隔离级别;2、以固定的顺序访问你的表和行;3、添加精心选定的索引到表中;4、使用更少的锁定。

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。
当多个事务同时持有和请求同一资源上的锁而产生循环依赖的时候就产生了死锁。死锁发生在事务试图以不同的顺序锁定资源。以StockPrice表上的两个事务为例:
事务1
1 2 3 4 | START TRANSACTION ;
UPDATE StockPrice SET close = 45.50 WHERE stock_id = 4 and date = '2002-05-01' ;
UPDATE StockPrice SET close = 19.80 WHERE stock_id = 3 and date = '2002-05-02' ;
COMMIT ;
|
事务 #2
1 2 3 4 | START TRANSACTION ;
UPDATE StockPrice SET high = 20.12 WHERE stock_id = 3 and date = '2002-05-02' ;
UPDATE StockPrice SET ;
COMMIT ;
|
如果不走运的话,每个事务都可以执行完第一个语句,并在过程中锁住资源。然后每个事务都试图去执行第二行语句,当时却发现它被锁住了。两个事务将永远的等待对方完成,除非有其他原因打断死锁。
阅读剩余部分
相关阅读 >>
mysql 查询结果取交集的方法
mysql 无法成功启动服务怎么办
mysql中优化和修复数据库工具mysqlcheck详细介绍
安装mysql会死机怎么办
mysql约束概述
详细讲解mysql全局变量与局部变量
mysql用户密码如何重新设置?
access是数据库管理系统吗
mysql数据库事务transaction示例讲解教程
mysql多表关联更新
更多相关阅读请进入《mysql》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » mysql死锁的原因和处理方法是什么