
用 SHOW TABLE STATUS 查当前库所有表的引擎
执行前必须先 USE your_database_name,否则会报错或返回空结果——这是新手最常卡住的地方。SHOW TABLE STATUS 读的是当前默认数据库的元数据,不带库名参数。
- 直接运行
SHOW TABLE STATUS会列出当前库下全部表,Engine列就是每张表的真实引擎(如InnoDB、MyISAM) - 字段名是
Engine(首字母大写),不是engine或ENGINE;某些 GUI 工具列名可能被截断,建议用命令行或导出为文本确认 - 结果里还包含
Rows(估算行数)、Data_length等运维关键字段,比纯查引擎更有信息密度
用 information_schema.TABLES 批量查并加条件过滤
适合脚本化、审计或迁移前摸底,能跨库、能加 WHERE、输出格式统一,SHOW TABLE STATUS 做不到这点。
- 查指定库所有表:
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name'; - 找非默认引擎的表(比如排查
MyISAM):WHERE ENGINE != 'InnoDB' -
TABLE_SCHEMA和TABLE_NAME大小写敏感,取决于系统变量lower_case_table_names设置,别用LOWER()包裹去模糊匹配
为什么不用 SHOW CREATE TABLE 批量查
SHOW CREATE TABLE 返回的是建表语句,引擎信息藏在末尾的 ENGINE=xxx 子串里,批量查时极易出错。
- 语句太长,MySQL 客户端默认只显示前几行,
ENGINE=部分可能被截断(尤其 Navicat 等 GUI 工具) - 如果表后来被
ALTER TABLE ... ENGINE=xxx修改过,SHOW CREATE TABLE仍显示原始建表时的引擎——它不反映当前真实状态 - ORM 或迁移工具生成的语句可能带注释或换行,
ENGINE=跨行时肉眼容易漏看
查不到引擎时先盯这三个点
不是命令不对,而是权限、上下文或对象类型出了问题。
- 没执行
USE就直接跑SHOW TABLE STATUS,会报错Table 'db.t' doesn't exist或返回空 - 对视图执行
SHOW TABLE STATUS,Engine字段为NULL,得先确认对象类型 -
Engine显示为空或NULL,大概率是当前用户缺少SELECT权限在information_schema库,不是引擎本身有问题
MyISAM 却没意识到它不支持事务——这得靠人判断,命令不会提醒你。


















