一、查询是否锁表

show OPEN TABLES where In_use > 0;

mysql怎么查看表是否死锁 mysql查询表死锁_mysql怎么查看表是否死锁

设置手动提交事务

set @@autocommit=0;

用for update锁住一条数据

START transaction ;

SELECT * from user WHERE id=1 for update;

再执行查询是否锁表命令

show OPEN TABLES where In_use > 0;

可以看到有一个表正在锁定中

mysql怎么查看表是否死锁 mysql查询表死锁_mysql_02

二、查看进程

show processlist

可以看到有个查询语句正在执行

mysql怎么查看表是否死锁 mysql查询表死锁_杀死进程_03

三、查看在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

mysql怎么查看表是否死锁 mysql查询表死锁_锁表_04

四、杀死进程(实测kill 两次id才能成功杀掉进程 kill一次之后再执行show processlist 出现了新的id)

kill id

mysql怎么查看表是否死锁 mysql查询表死锁_查询语句_05

五、其它查看死锁命令

  1. 查看当前的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
  1. 查看当前等锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;