如何统计MySQL指定数据库中所有表和视图的列数量
查询指定MySQL库内所有表、视图列数的方法
直接查询MySQL内置的information_schema元数据库即可实现,不需要额外导出结构或写脚本处理。
基础查询(直接返回你需要的格式)
将SQL中的你的目标数据库名替换为实际要统计的数据库名称,执行后即可得到每个表、视图对应的列总数:
SELECT TABLE_NAME AS table_name, COUNT(COLUMN_NAME) AS column_count FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '你的目标数据库名' GROUP BY TABLE_NAME ORDER BY TABLE_NAME;
查询逻辑说明
information_schema.COLUMNS是MySQL内置的系统表,存储了所有数据库下基表、视图的全部列元数据,两类对象的列记录都会被完整收录- 通过
TABLE_SCHEMA条件过滤指定数据库下的所有列记录 - 按对象名
TABLE_NAME分组统计列数,返回的字段名、统计结果完全匹配你给出的预期输出格式,对应示例结构的返回结果如下:
| table_name | column_count |
|---|---|
| TABLE_1 | 2 |
| TABLE_2 | 1 |
| VIEW_1 | 1 |
扩展:区分对象类型的查询
如果需要在结果中区分统计对象是普通表还是视图,可以关联information_schema.TABLES表增加类型字段:
SELECT c.TABLE_NAME AS table_name, t.TABLE_TYPE AS object_type, COUNT(c.COLUMN_NAME) AS column_count FROM information_schema.COLUMNS c LEFT JOIN information_schema.TABLES t ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME WHERE c.TABLE_SCHEMA = '你的目标数据库名' GROUP BY c.TABLE_NAME, t.TABLE_TYPE ORDER BY c.TABLE_NAME;
返回结果中object_type字段值为BASE TABLE代表是普通基表,值为VIEW代表是视图,可按需筛选。
内容的提问来源于stack exchange,提问作者Akumaburn
相关产品推荐
相关产品推荐

