求MySQL查询有数据的所有表及其全部字段的SQL语句
MySQL 查询包含数据的表及其字段名
要拿到所有有数据行的表对应的表名和字段名,咱们可以借助MySQL的系统信息表来实现,下面是直接可用的SQL语句:
可用SQL语句
SELECT c.TABLE_NAME AS `表名`, c.COLUMN_NAME AS `字段名` FROM INFORMATION_SCHEMA.COLUMNS c JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME WHERE t.TABLE_ROWS > 0 -- 要是只想查某个特定数据库,解开下面这行注释并替换成你的库名 -- AND c.TABLE_SCHEMA = 'your_database_name' ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION;
额外说明
- 这里用
INFORMATION_SCHEMA.TABLES里的TABLE_ROWS判断表是否有数据,对于MyISAM表这个值是精确的,InnoDB表是估算值,常规场景完全够用; - 如果必须要精确判断表是否存在数据,就得写存储过程动态统计每个表的行数,但一般没必要,上面的语句已经能满足大部分需求;
- 你之前的思路是对的——先筛出有数据的表,再拿这些表的字段,上面的语句用JOIN关联两个系统表,比子查询更直观高效。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

