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


    一、业务背景

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

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

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

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

    MySQL - 维基百科,自由的百科全书

    二、如何获取全部表名

    基本的语句为 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    需要配置几个参数,并且已经按表名进行排序,TABLE_COMMENT 为表注释。

    1. TABLE_SCHEMA 数据库名称
    2. x_ 表前缀

    运行结果如下图

    image-20220812140626613

    三、如何获取表结构

    show full columns 可以展示表的全部字段,并包含完整信息,完整SQL语句为

    show full columns  from xxx
    
    • 1

    其中xxx为具体的表名,注意替换,执行结果如下图。

    image-20220812141936287

    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 可以展示数据库里全部表和表的结构。

  • 相关阅读:
    面经汇总--校招--金山办公
    Oracle——常用的几种函数(含案例)
    jsp文件中模板字符串变量${}失效
    @Transactional注解加不加 rollbackFor = Exception.class 的区别?
    docker封装镜像(PHP)
    从有序链表中移除重复节点(c#)
    uni-app下载文件、获取文件夹下的文件、删除文件夹里的文件
    教育部:每所学校贷款项目总投资原则上不低于2000万
    【Verilog教程】2.4Verilog表达式
    PDF转换器用什么好?这款一定能够帮到你
  • 原文地址:https://blog.csdn.net/diandianxiyu/article/details/126303626