新瓶装旧酒-MySQL数据库表结构文档生成工具分享

新瓶装旧酒-MySQL数据库表结构文档生成工具分享

十一月 15, 2024 阅读量

主要就是分享一下自己以前写的工具,可以直接跳转到最后链接获取

翻开博客,发现已经快一年没有写新博客了,因为不做开发很多年了,又没有去接触新技术的想法,也就没有遇到什么要解决的问题,帮朋友做的小工具还不足以发篇博客(水是能水出来的,又不是没水过)。最近尝试修改下博客,发现一个if判断都要想半天,不加注释,自己写的都得理解半天。有时候觉得以前的自己真的很强,真的喜欢编程,把兴趣变成工作,现在不写代码多年,已经跟不上时代的步伐。以前做微信公众号的时候也是兴趣使然,看看以前写的文章是真能码字,现在没了当初的热情。一看阅读量个位数,还是朋友和自己看的吧。年底了,最近也有点自己的时间,看看以前写的文章,以前写的代码,了解一下过去的自己。对自己好点吧,自己才能好一点。

第一次发表于2018年7月的文章-MySQL数据库表结构文档生成工具随笔,当时正是工具第一版写出来的时候。感兴趣可以去阅读一下,挽救下个位数的阅读量。废话有点多,就基本逻辑那能看一下,直接摘抄下来。

起因是想理解一下数据库结构,但是没有相应的文档,就打算边看边写。但是数据库有接近180的表,就有了写工具的想法。文档的话,首选VBA。源文件是基于Navicat for >MySQL抽出的数据库结构文件。生成的结构是desc 表返回的结果去掉Extra列。
主要是晚上在公司写的,花费了4晚上,白天有一段时间在测试。本身难度不大,就是MySQL接触太少,有些地方需求不明确,没法实现。问朋友,也没有太明白的。本来打算实践的,不过查阅了一些资料,有了新的>理解。主要有两个地方,一个是key值的设定。一个是数据类型的覆盖。

Key,网上解释的都大同小异。最后从官网看的文档。MySQL官网对key的解释,版本是8.0,看了一下7.5的解释,都是一样的。链接内容如下;

https://dev.mysql.com/doc/refman/8.0/en/show-columns.html

Key

Whether the column is indexed:

•If Key is empty, the column either is not indexed or is indexed onlyas a secondary column in a multiple-column, nonunique index.

•If Key is PRI, the column is a PRIMARY KEY or is one of the columnsin a multiple-column PRIMARY KEY.

•If Key is UNI, the column is the first column of a UNIQUE index. (AUNIQUE index permits multiple NULL values, but you can tell whether the columnpermits NULL by >checking the Null field.)

•If Key is MUL, the column is the first column of a nonunique indexin which multiple occurrences of a given value are permitted within the column.

If more than one of the Key values appliesto a given column of a table, Key displays the one with the highest priority,in the order PRI, UNI, MUL.

A UNIQUE index may be displayed as PRI ifit cannot contain NULL values and there is no PRIMARY KEY in the table. AUNIQUE index may display as MUL if several columns >form a composite UNIQUEindex; although the combination of the columns is unique, each column can stillhold multiple occurrences of a given value.

列中可能存在的索引:

•如果键是空的, 则该列没有索引或是非唯一索引的非第一行。

•如果键是PRI,则列是主键或多列主键中的列之一。

•如果键是UNI,则该列是唯一索引的第一列。(唯一索引允许多个空值,但可以通过检查Null字段来判断该列是否允许空。)

•如果键为MUL,则该列是非唯一索引的第一列,其中允许在列中多次出现给定值。

如果不止一个键值应用于表的给定列,则键以优先级PRI、UNI、MUL的顺序显示优先级最高的一个。

如果不能包含空值且表中没有主键,则可以显示唯一索引作为PRI。如果多个列形成复合唯一索引,则唯一索引可以显示为MUL;尽管列的组合是唯一的,但每个列仍然可以保持给定值的多次出现。

我的理解,也是按照下边逻辑写的,没有主键有唯一的情况未考虑:

只要是主键就表示PRI。

只要是单列唯一索引就表示UNI。

多列组合唯一索引第一列,非唯一索引第一列表示MUL。

唯一索引的非第一行,不表示。

后来有几次bug修改,以及一些功能优化,添加,更新记录如下:

1.4.0的时候出了一个插曲,完成删库成就,具体可以看下这篇文章-某码农的代码碎片5-删库跑路
最后一版还是B站go语言源代码泄露的时候改的,手动滑稽

操做页面里有写,根据需要勾选选项,点按钮,选择对应的sql结构文件就行。

生成表结构的效果图

最后工具获取链接:
MySQL数据库表结构文档生成工具V1.5.0.xlsm