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
;
从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;
生成数据库文档!!!
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
3、成功之后在该pom文件的模块下面生成了一个doc文件夹下面就是生成的文档