在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里。
具体到业务中的需求比如:
如果你在实际业务中遇到了这个需求,请在评论区留下你的实际业务需求,以供大家参考。
基本的语句为 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 为表注释。
运行结果如下图
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
为is PRI
,PRIMARY KEY
则列为a 或为多列中的列之一PRIMARY KEY
。Key
为UNI
,则该列为UNIQUE
索引的第一列。(UNIQUE
索引允许使用多个NULL
值,但是您可以NULL
通过检查Null
字段来判断该列是否允许使用。)Key
为is MUL
,则该列是非唯一索引的第一列,在该列中允许多次出现给定值。如果超过一个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
可以展示数据库里全部表和表的结构。