一、业务背景
在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里。
具体到业务中的需求比如:
- 导出全部表结构到文件
- 后台展示全部数据表,点击可查看表结构
如果你在实际业务中遇到了这个需求,请在评论区留下你的实际业务需求,以供大家参考。
二、如何获取全部表名
基本的语句为 SELECT table_name FROM information_schema.tables
。
但是这个并不符合业务需求,因为这会返回全部的表名,而业务中需要限定是哪个数据库,并且,不同的业务可能会使用不同的表前缀,所以最好可以限定表前缀,并且需要展示表的注释,不然大家也不清楚表是属于哪个业务的。
所以,完整的SQL语句如下。
SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'TABLE_SCHEMA' AND TABLE_NAME LIKE 'x_%' AND TABLE_NAME NOT LIKE 'xx_exp%' ORDER BY TABLE_NAME
需要配置几个参数,并且已经按表名进行排序,TABLE_COMMENT 为表注释。
- TABLE_SCHEMA 数据库名称
- x_ 表前缀
运行结果如下图
三、如何获取表结构
show full columns
可以展示表的全部字段,并包含完整信息,完整SQL语句为
show full columns from xxx
其中xxx为具体的表名,注意替换,执行结果如下图。
show full columns
执行结果的具体含义分别为,以下说明来自MySQL官方文档。
Field
列的名称。Type
列数据类型。Collation
非二进制字符串列或NULL
其他列的排序规则。仅当您使用FULL
关键字时,才显示此值。Null
列的可空性。值是YES
是否NULL
可以将值存储在列中(NO
如果不能)。Key
列是否被索引:
- 如果
Key
为空,则该列要么不被索引,要么仅被索引为多列非唯一索引中的第二列。 - 如果
Key
为isPRI
,PRIMARY KEY
则列为a 或为多列中的列之一PRIMARY KEY
。 - 如果
Key
为UNI
,则该列为UNIQUE
索引的第一列。(UNIQUE
索引允许使用多个NULL
值,但是您可以NULL
通过检查Null
字段来判断该列是否允许使用。) - 如果
Key
为isMUL
,则该列是非唯一索引的第一列,在该列中允许多次出现给定值。
- 如果超过一个
Key
值适用于表中给定的列,Key
显示一个具有最高优先级,顺序PRI
,UNI
,MUL
。
甲UNIQUE
索引可被显示为PRI
,如果它不能包含NULL
值并没有PRIMARY KEY
在表中。甲UNIQUE
索引可能会显示为MUL
如果若干列形成复合UNIQUE
索引;尽管各列的组合是唯一的,但各列仍可以容纳多次出现的给定值。 Default
列的默认值。这是NULL
如果列有一个明确的默认NULL
,或者如果列定义不包括DEFAULT
条款。Extra
有关给定列的任何其他可用信息。在以下情况下,该值是非空的:
auto_increment
具有AUTO_INCREMENT
属性的列。on update CURRENT_TIMESTAMP
对于TIMESTAMP
或DATETIME
有列ON UPDATE CURRENT_TIMESTAMP
属性。VIRTUAL GENERATED
或VIRTUAL STORED
用于生成的列。DEFAULT_GENERATED
对于具有表达式默认值的列。
Privileges
您具有该列的特权。仅当您使用FULL
关键字时,才显示此值。Comment
列定义中包含的任何注释。仅当您使用FULL
关键字时,才显示此值。
四、总结
SELECT table_name FROM information_schema.tables
配合show full columns
可以展示数据库里全部表和表的结构。