模拟死锁 - 第一步(创建表,并插入数据)
1 | CREATE TABLE `test` ( |
模拟死锁 - 第二步(会话一:开启事务,更新不提交)
1 | begin; |
模拟死锁 - 第三步(会话二:开启事务,更新同一条数据)
经过一段时间后,提示 Lock wait timeout exceeded; try restarting transaction
1
UPDATE test SET title = 'D' WHERE id = 1;
解决方法
1 | #查看未提交的事务,trx_mysql_thread_id 为线程ID,比如查询出来的 trx_mysql_thread_id = 853 |
相关命令
1
2
3
4
5
6#显示哪些线程正在运行
SHOW PROCESSLIST;
#查看当前锁定的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
#查看当前等待的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;