MySQL如何使用SQL语句获取表结构和获取全部表名

Posted 小雨青年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL如何使用SQL语句获取表结构和获取全部表名相关的知识,希望对你有一定的参考价值。

目录

一、业务背景

在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里。

具体到业务中的需求比如:

  • 导出全部表结构到文件
  • 后台展示全部数据表,点击可查看表结构

如果你在实际业务中遇到了这个需求,请在评论区留下你的实际业务需求,以供大家参考。

二、如何获取全部表名

基本的语句为 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 为表注释。

  1. TABLE_SCHEMA 数据库名称
  2. 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为is PRIPRIMARY KEY则列为a 或为多列中的列之一PRIMARY KEY
    • 如果KeyUNI,则该列为UNIQUE索引的第一列。(UNIQUE索引允许使用多个NULL值,但是您可以NULL通过检查Null字段来判断该列是否允许使用。)
    • 如果Key为is MUL,则该列是非唯一索引的第一列,在该列中允许多次出现给定值。

    如果超过一个Key值适用于表中给定的列,Key显示一个具有最高优先级,顺序PRIUNIMUL

    UNIQUE索引可被显示为PRI,如果它不能包含NULL值并没有PRIMARY KEY在表中。甲UNIQUE索引可能会显示为MUL如果若干列形成复合UNIQUE索引;尽管各列的组合是唯一的,但各列仍可以容纳多次出现的给定值。

  • Default

    列的默认值。这是NULL如果列有一个明确的默认NULL,或者如果列定义不包括DEFAULT条款。

  • Extra

    有关给定列的任何其他可用信息。在以下情况下,该值是非空的:

    • auto_increment具有AUTO_INCREMENT属性的列。
    • on update CURRENT_TIMESTAMP对于TIMESTAMPDATETIME有列ON UPDATE CURRENT_TIMESTAMP属性。
    • VIRTUAL GENERATEDVIRTUAL STORED用于生成的列。
    • DEFAULT_GENERATED对于具有表达式默认值的列。
  • Privileges

    您具有该列的特权。仅当您使用FULL关键字时,才显示此值。

  • Comment

    列定义中包含的任何注释。仅当您使用FULL关键字时,才显示此值。

四、总结

SELECT table_name FROM information_schema.tables 配合show full columns 可以展示数据库里全部表和表的结构。

以上是关于MySQL如何使用SQL语句获取表结构和获取全部表名的主要内容,如果未能解决你的问题,请参考以下文章

如何从mysql数据库中获取一个表的表结构

MySQL 复制表

MySQL 复制表:如何准确无误的创建复制表?

oracle 如何获取表的结构,就像mysql里的desc命令一样的功能,

PHPWord实战篇-获取数据全部表和表结构并导出Word文件

PHPWord实战篇-获取数据全部表和表结构并导出Word文件