最近一直在写项目的接口和设计文档,需要将数据库中的表结构以Excel格式导出,通过在网上的搜索,结合自己的实际使用经验,总结方法如下:
本文以Navicat为例进行讲解,其他工具类似。
第一步,使用Navicat连接数据库,并打开查询界面,新建一个空的查询:
第二步,在查询界面中输入以下SQL语句:
SELECT
COLUMN_NAME 列名,
COLUMN_TYPE 数据类型,
IS_NULLABLE 允许空,
COLUMN_DEFAULT 默认值,
COLUMN_KEY 约束,
COLUMN_COMMENT 备注
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE– database_name为数据库名称,到时候只需要修改成你要导出表结构的数据库即可
table_schema = ‘database_name’
AND — table_name为表名,到时候换成你要导出的表的名称
— 如果不写的话,默认会查询出所有表中的数据,这样可能就分不清到底哪些字段是哪张表中的了,所以还是建议写上要导出的名名称
table_name = ‘table_name’
第三步,单击运行,即可以看到我们已经拿到了数据库结构:
第四步,全选查询结果,单击鼠标右键,在弹出的菜单中,依次单击“复制为”,“制表符分隔值(字段名和数据)”:
第五步,打开Excel,粘贴刚才复制的内容,然后可以按照自己的需要对格式进行调整并保存,至此,完成MySQL表结构导出成Excel格式的操作。
上述操作方法,本质上其实是通过MySQL的information_schema数据库中的COLUMNS表查询数据库中表的字段信息,COLUMNS表中记录了MySQL所有库中所有表的字段信息,COLUMNS表的结构如下图所示:
下面对每一个字段所存储的内容进行说明:
TABLE_CATALOG
MySQL官方文档中说,这个字段值永远是def,但没写这个字段是干嘛用的。网上有把这个叫表限定符的,有叫登记目录的。作用疑似是和其他种类的数据库做区分。
TABLE_SCHEMA
表格所属的库。
TABLE_NAME
表名
COLUMN_NAME
字段名
ORDINAL_POSITION
字段标识。
其实就是字段编号,从1开始往后排。
COLUMN_DEFAULT
字段默认值。
IS_NULLABLE
字段是否可以为NULL。该列记录的值是YES或者NO。
DATA_TYPE
数据类型。里面的值是字符串,比如varchar,float,int。
CHARACTER_MAXIMUM_LENGTH
字段的最大字符数。假如字段设置为varchar(50),那么这一列记录的值就是50。该列只适用于二进制数据,字符,文本,图像数据。其他类型数据比如int,float,datetime等,在该列显示为NULL。
CHARACTER_OCTET_LENGTH
字段的最大字节数。和最大字符数一样,只适用于二进制数据,字符,文本,图像数据,其他类型显示为NULL。和最大字符数的数值有比例关系,和字符集有关。比如UTF8类型的表,最大字节数就是最大字符数的3倍。
NUMERIC_PRECISION
数字精度。适用于各种数字类型比如int,float之类的。如果字段设置为int(10),那么在该列保存的数值是9,少一位,还没有研究原因。如果字段设置为float(10,3),那么在该列报错的数值是10。非数字类型显示为在该列NULL。
NUMERIC_SCALE
小数位数。和数字精度一样,适用于各种数字类型比如int,float之类。如果字段设置为int(10),那么在该列保存的数值是0,代表没有小数。如果字段设置为float(10,3),那么在该列报错的数值是3。非数字类型显示为在该列NULL。
DATETIME_PRECISION
datetime类型和SQL-92interval类型数据库的子类型代码。我本地datetime类型的字段在该列显示为0。其他类型显示为NULL。
CHARACTER_SET_NAME
字段字符集名称。比如utf8。
COLLATION_NAME
字符集排序规则。比如utf8_general_ci,是不区分大小写一种排序规则。utf8_general_cs,是区分大小写的排序规则。
COLUMN_TYPE
字段类型。比如float(9,3),varchar(50)。
COLUMN_KEY
索引类型。可包含的值有PRI,代表主键,UNI,代表唯一键,MUL,可重复。
EXTRA
其他信息。比如主键的auto_increment。
PRIVILEGES
权限。多个权限用逗号隔开,比如 select,insert,update,references
COLUMN_COMMENT
字段注释
GENERATION_EXPRESSION
组合字段的公式。
本文主要参考以下两篇文章完成:
https://jingyan.baidu.com/album/8ebacdf07fcdfb49f75cd541.html?picindex=2
https://blog.csdn.net/lkforce/article/details/79557482