如果在使用MySQL的过程中发生了死锁,临时的解决方案是通过查看 information_schema 库中的 INNODB_LOCKS 和 INNODB_LOCK_WAITS 表来查看死锁信息
查看死锁的SQL语句:
SELECT
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
FROM
information_schema.innodb_lock_waits w
INNER JOIN information_schema.innodb_trx b ON
b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.innodb_trx r ON
r.trx_id = w.requesting_trx_id;
这个查询会返回当前正在等待的事务(waiting_trx)和阻塞它的事务(blocking_trx)的信息,也包括它们的ID、线程ID和正在执行的查询。
然后找到引起阻塞的查询将他kill掉就可以了