mysql死锁处理方法 mysql执行查询死锁

导读:死锁是数据库中常见的问题,当多个事务同时请求相同的资源时 , 可能会出现死锁 。本文将介绍如何在MySQL中执行查询死锁 。
1. 查看当前的死锁情况
使用SHOW ENGINE INNODB STATUS命令可以查看当前的死锁情况 。该命令会返回一个包含有关当前所有活动事务的信息的长字符串 。在这个字符串中,您可以找到与死锁相关的信息 。
2. 找到死锁的原因
在SHOW ENGINE INNODB STATUS输出中,您可以找到以下内容:
LATEST DETECTED DEADLOCK
------------------------
2020-01-01 00:00:00 7f8b9c3a9700
*** (1) TRANSACTION:
TRANSACTION 123456, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 10, OS thread handle 140191374034944, query id 1234 localhost root updating
UPDATE table SET value = 'http://data.evianbaike.com/MySQL/new_value' WHERE id = 1
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 123 page no 4 n bits 72 index PRIMARY of table `database`.`table` trx id 123456 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
0: len 4; hex 80000001; asc ;;
1: len 6; hex 000000123456; asc 4V;;
2: len 7; hex 6578616d706c65; asc example;;
*** (2) TRANSACTION:
TRANSACTION 123457, ACTIVE 0 sec starting index read
5 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 11, OS thread handle 140191374034944, query id 1235 localhost root updating
UPDATE table SET value = 'http://data.evianbaike.com/MySQL/new_value' WHERE id = 2
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 123 page no 4 n bits 72 index PRIMARY of table `database`.`table` trx id 123457 lock_mode X locks rec but not gap
Record lock, heap no 3 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
0: len 4; hex 80000002; asc ;;
1: len 6; hex 000000123457; asc 4W;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 123 page no 4 n bits 72 index PRIMARY of table `database`.`table` trx id 123457 lock_mode X locks rec but not gap waiting
*** WE ROLL BACK TRANSACTION (2)
在上面的输出中,您可以看到两个事务(TRANSACTION 123456和TRANSACTION 123457)都在等待对方持有的锁 。这是一个典型的死锁情况 。
3. 解决死锁
解决死锁的方法是回滚其中一个事务 。在上面的例子中,MySQL已经自动回滚了TRANSACTION 123457 。如果您想手动回滚事务,请使用ROLLBACK命令 。
【mysql死锁处理方法 mysql执行查询死锁】总结:死锁是数据库中常见的问题,但是可以通过SHOW ENGINE INNODB STATUS命令来查看当前的死锁情况,并找出死锁的原因 。解决死锁的方法是回滚其中一个事务 。

    推荐阅读