SHOW TABLES仅查询当前数据库的表,需先USE切换库或用FROM指定库;不支持IN语法,可用LIKE过滤;如需详细信息(引擎、行数等)须查information_schema.TABLES。

show tables 只查当前库,切记先 use
直接执行 SHOW TABLES 不会报错,但结果为空或不符合预期——因为它只作用于当前默认数据库。没选库就查,等于在 information_schema 或空上下文里找表,基本啥也看不到。
实操建议:
- 先确认当前库:
SELECT DATABASE();,返回NULL就说明还没USE - 切换目标库:
USE your_db_name;(别漏分号) - 再执行:
SHOW TABLES; - 如果连库名都不确定,用
SHOW DATABASES;先扫一遍
想查其他库的表?用 FROM 子句
SHOW TABLES 支持指定数据库,不用手动 USE 切换,适合脚本或临时查询。
常见错误现象:写成 SHOW TABLES IN other_db; ——MySQL 不认 IN,只认 FROM。
正确写法:
SHOW TABLES FROM my_app;-
SHOW TABLES FROM mysql;(查系统库表,需要对应权限) - 权限不足时会报错:
Access denied for user ... to database 'other_db'
只看表名不够?加 LIKE 或 WHERE 过滤
默认 SHOW TABLES 返回单列(Tables_in_xxx),没法用标准 SQL 的 WHERE,但支持 LIKE 模糊匹配。
使用场景:排查命名不规范的表、找临时表、过滤系统生成的备份表。
实操建议:
- 查所有带
_bak的表:SHOW TABLES LIKE '%_bak'; - 查以
user开头的表:SHOW TABLES LIKE 'user%'; - 注意:通配符是
%和_,不是正则;大小写敏感取决于库的collation
需要更详细信息?别硬扛 show tables
SHOW TABLES 只给名字,没有引擎、行数、创建时间等。真要这些,得切到 information_schema 查。
性能影响:直接查 information_schema.TABLES 比 SHOW TABLES 略慢,尤其库表极多时(比如上千张表),因为要扫描元数据。
关键差异:
-
SHOW TABLES快、轻量、权限要求低 -
SELECT table_name, engine, table_rows FROM information_schema.TABLES WHERE table_schema = 'my_db';才能拿到完整结构信息 - 注意:
table_rows是估算值,MyISAM准,InnoDB可能不准,别拿它做精确计数
容易被忽略的一点:MySQL 8.0+ 默认关闭了对 information_schema 中某些字段(如 TABLE_ROWS)的访问权限,如果查出来全是 NULL,先检查账号有没有 PROCESS 权限或者是否启用了 innodb_stats_on_metadata。










