1. 简介
在mysql数据库中,当多个线程同时对数据库进行读写时,就需要采用锁机制来保证数据的一致性。但是在实际操作中可能会出现锁表的情况,这时我们需要查询哪些表被锁住了,才能更好地为系统做出调整。
2. 查询被锁的表
2.1 查看当前会话锁住的表
我们可使用命令 SHOW OPEN TABLES 来查询当前会话锁住的表。
SHOW OPEN TABLES WHERE In_use > 0;
该命令将会输出被当前会话锁住的表信息。
2.2 查看系统会话锁住的表
我们可使用命令 SELECT * FROM performance_schema.table_handles WHERE OBJECT_TYPE = 'TABLE' AND OBJECT_NAME IS NOT NULL AND LOCKED_BY_THREAD_ID IS NOT NULL; 来查询系统会话锁住的表。
SELECT * FROM performance_schema.table_handles WHERE OBJECT_TYPE = 'TABLE' AND OBJECT_NAME IS NOT NULL AND LOCKED_BY_THREAD_ID IS NOT NULL;
该命令将会输出被系统会话锁住的表信息。
2.3 使用Information Schema
使用Information Schema查询被锁的表有以下步骤:
查询Information Schema中的当前锁定信息。
使用查询结果中的TABLE_SCHEMA和TABLE_NAME来查询被锁的表。
查询当前锁定信息:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE locked_table IS NOT NULL;
查询被锁的表信息:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DBNAME' and TABLE_NAME = 'TABLENAME';
其中,DBNAME为被锁定表所在的数据库名,TABLENAME为被锁定表的表名。