曹旭辉 发表于 2024-8-24 15:43:26

MySQL查询数据库中所有表名表结构及注释以及生成数据库文档

MySQL查询数据库中所有表名表结构及注释
生成数据库文档在后面!!! 
select t.TABLE_COMMENT -- 数据表注释
, c.TABLE_NAME -- 表名称
, c.COLUMN_COMMENT -- 数据项
, c.COLUMN_NAME -- 英文名称
, '' -- 字段描述
, upper(c.DATA_TYPE) as DATA_TYPE -- 数据类型
, c.CHARACTER_MAXIMUM_LENGTH -- 数据长度
, '' -- 是否字典项
, '' -- 字典内容
, (case
when c.IS_NULLABLE = 'YES' then '是'
when c.IS_NULLABLE = 'NO' then '否'
else c.IS_NULLABLE
end) as IS_NULLABLE -- 是否为空
, (
case
when c.COLUMN_KEY = 'PRI' then '是'
when c.COLUMN_KEY is null or c.COLUMN_KEY = '' then '是'
else c.COLUMN_KEY
end
) as COLUMN_KEY-- 是否主键
, c.COLUMN_DEFAULT-- 默认值
from information_schema.COLUMNS c,
information_schema.TABLES t
where c.TABLE_NAME = t.TABLE_NAME
and c.TABLE_SCHEMA not in ('information_schema', 'sys', 'performance_schema', 'mysql')
order by t.TABLE_COMMENT
; https://img-blog.csdnimg.cn/direct/81439791651046a2a14ec1199a61b95e.png
从information_schema.COLUMNS和information_schema.TABLES这两个体系视图中检索数据表及其列的详细信息。

[*]笛卡尔积:您的查询使用了逗号分隔的表名(information_schema.COLUMNS c, information_schema.TABLES t),这会导致两个表之间的笛卡尔积,除非您通过WHERE子句或其他方式明确指定连接条件。在您的例子中,您确实在WHERE子句中指定了c.TABLE_NAME = t.TABLE_NAME作为连接条件,但这仍旧可能导致性能题目,由于不是标准的JOIN语法。
[*]JOIN语法:建议使用显式的JOIN语法来连接表,由于它更清楚且更容易维护。
[*]表注释:t.TABLE_COMMENT可能是从TABLES视图中获取的,但是您没有确保TABLES视图中的TABLE_COMMENT是针对与COLUMNS中雷同的TABLE_SCHEMA的。
[*]字段形貌:您为“字段形貌”预留了两个空字符串占位符,但您可能希望从某个地方获取实际的形貌。
[*]CASE表达式:您的CASE表达式用于确定IS_NULLABLE和COLUMN_KEY的值,但有一个潜伏的题目:当COLUMN_KEY为NULL或空字符串时,您将其设置为'是',这可能不是您想要的结果。通常,主键字段不会是'是'。
 简洁版:
SELECT   
    t.TABLE_COMMENT AS 数据表注释,
    c.TABLE_NAME AS 表名称,
    c.COLUMN_COMMENT AS 数据项,
    c.COLUMN_NAME AS 英文名称,
    '' AS 字段描述, -- 这里可以替换为实际的字段描述来源
    UPPER(c.DATA_TYPE) AS DATA_TYPE,
    c.CHARACTER_MAXIMUM_LENGTH AS 数据长度,
    '' AS 是否字典项, -- 这里可以替换为实际的字典项来源
    '' AS 字典内容, -- 这里可以替换为实际的字典内容来源
    CASE   
      WHEN c.IS_NULLABLE = 'YES' THEN '是'
      WHEN c.IS_NULLABLE = 'NO' THEN '否'
      ELSE c.IS_NULLABLE
    END AS IS_NULLABLE,
    CASE   
      WHEN c.COLUMN_KEY = 'PRI' THEN '是'
      WHEN c.COLUMN_KEY IN ('MUL', 'UNI') THEN '其他键' -- 例如:唯一键或多键
      ELSE '否'
    END AS COLUMN_KEY,
    c.COLUMN_DEFAULT AS 默认值
FROM   
    information_schema.COLUMNS c
JOIN   
    information_schema.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
WHERE   
    c.TABLE_SCHEMA NOT IN ('information_schema', 'sys', 'performance_schema', 'mysql')
ORDER BY   
    t.TABLE_COMMENT; https://img-blog.csdnimg.cn/direct/1b08c7edf21e4dd985cf90e892727121.png
生成数据库文档!!!
screw: 简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/Oracle/PostgreSQL/TIDB/CacheDB 数据库。 - Gitee.com
使用方法:
1、在pom文件中添加插件
<build>
      
            <plugin>
                <groupId>cn.smallbun.screw</groupId>
                <artifactId>screw-maven-plugin</artifactId>
                <version>1.0.4</version>
                <dependencies>
                  <!-- HikariCP -->
                  <dependency>
                        <groupId>com.zaxxer</groupId>
                        <artifactId>HikariCP</artifactId>
                        <version>3.4.5</version>
                  </dependency>
                  <!--mysql driver-->
                  <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.20</version>
                  </dependency>
                </dependencies>
                <configuration>
                  <!--username-->
                  <username>root</username>
                  <!--password-->
                  <password>#n4rj</password>
                  <!--driver-->
                  <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
                  <!--jdbc url-->
                  <jdbcUrl>jdbc:mysql://1.1.1.1:3456/tlink_sdgf</jdbcUrl>
                  <!--生成文件类型、HTML-->
                  <fileType>WORD</fileType>
                  <!--打开文件输出目录-->
                  <openOutputDir>false</openOutputDir>
                  <!--生成模板-->
                  <produceType>freemarker</produceType>
                  <!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称-->
                  <fileName>测试文档名称</fileName>
                  <!--描述-->
                  <description>数据库文档生成</description>
                  <!--版本-->
                  <version>${project.version}</version>
                  <!--标题-->
                  <title>数据库文档</title>
                </configuration>
                <executions>
                  <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                  </execution>
                </executions>
            </plugin>
      </plugins>
    </build>  2、点开maven找到该pom文件下面的插件双击run
https://img-blog.csdnimg.cn/direct/155210b40c9f4f28b1471e57ec6ad014.png
https://img-blog.csdnimg.cn/direct/73decbf0c8bb48aea7d3423185b9a7fc.png
3、成功之后在该pom文件的模块下面生成了一个doc文件夹下面就是生成的文档
https://img-blog.csdnimg.cn/direct/2fbeb14af2ee49ee99d6e411981ca106.png
https://img-blog.csdnimg.cn/direct/5de215a3e27c4db7a6e217c22ae8d305.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL查询数据库中所有表名表结构及注释以及生成数据库文档