Mysql生成數(shù)據(jù)字典的原理與實(shí)例
生成原理
在MySQL中,有個(gè)自帶的數(shù)據(jù)庫(kù),名為information_schema。其中保存著關(guān)于MySQL服務(wù)器所維護(hù)的所有其他數(shù)據(jù)庫(kù)的信息。如數(shù)據(jù)庫(kù)名,數(shù)據(jù)庫(kù)的表,表欄的數(shù)據(jù)類型與訪問權(quán) 限等。我們通過查詢這個(gè)數(shù)據(jù)庫(kù)的COLUMNS表(此表提供了其他所有表中的列信息)信息,來(lái)獲取我們需要的表結(jié)構(gòu)信息,從而將其導(dǎo)出為數(shù)據(jù)字典。
生成實(shí)例
navicat 執(zhí)行以下SQL的查詢(如果需要其他字段,請(qǐng)參考下面COLUMNS表字段拓展):
SELECT
COLUMN_NAME AS '字段名',
COLUMN_TYPE AS '字段類型',
( CASE WHEN IS_NULLABLE = 'YES' THEN '是' ELSE '否' END ) AS '是否可空',
( CASE WHEN COLUMN_KEY = 'PRI' THEN '是' ELSE '否' END ) AS '是否主鍵',
COLUMN_DEFAULT AS '默認(rèn)值',
COLUMN_COMMENT AS '注釋'
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = '數(shù)據(jù)庫(kù)'
AND TABLE_NAME = '表';通過navicat工具進(jìn)行導(dǎo)出(如下圖的按鈕,之后自行選擇要導(dǎo)出的內(nèi)容);

COLUMNS表字段拓展:
| 列名 | 描述 |
|---|---|
| COLUMN_NAME | 字段名 |
| COLUMN_TYPE | 字段類型 |
| TABLE_CATALOG | 表限定符。 |
| IS_NULLABLE | 列的為空性。如果列允許 NULL,那么該列返回 YES。否則,返回 NO。 |
| COLUMN_KEY | 字段主鍵 |
| COLUMN_DEFAULT | 默認(rèn)值 |
| COLUMN_COMMENT | 注釋 |
| ORDINAL_POSITION | 字段在表的順序(從1開始) |
| TABLE_NAME | 數(shù)據(jù)表名 |
| TABLE_SCHEMA | 數(shù)據(jù)庫(kù)名 |
| DATA_TYPE | 數(shù)據(jù)類型 |
| DATETIME_PRECISION | datetime 及 SQL-92 interval 數(shù)據(jù)類型的子類型代碼。對(duì)于其它數(shù)據(jù)類型,返回 NULL。 |
| EXTRA | 額外信息 |
| GENERATION_EXPRESSION | |
| NUMERIC_PRECISION | 近似數(shù)字?jǐn)?shù)據(jù)、精確數(shù)字?jǐn)?shù)據(jù)、整型數(shù)據(jù)或貨幣數(shù)據(jù)的精度。否則,返回 NULL。 |
| NUMERIC_SCALE | 近似數(shù)字?jǐn)?shù)據(jù)、精確數(shù)字?jǐn)?shù)據(jù)、整數(shù)數(shù)據(jù)或貨幣數(shù)據(jù)的小數(shù)位數(shù)。否則,返回 NULL。 |
| PRIVILEGES | |
| CHARACTER_MAXIMUM_LENGTH | 以字符為單位的最大長(zhǎng)度,適于二進(jìn)制數(shù)據(jù)、字符數(shù)據(jù),或者文本和圖像數(shù)據(jù)。否則,返回NULL。 |
| CHARACTER_OCTET_LENGTH | 以字節(jié)為單位的最大長(zhǎng)度,適于二進(jìn)制數(shù)據(jù)、字符數(shù)據(jù),或者文本和圖像數(shù)據(jù)。否則,返回 NULL。 |
| CHARACTER_SET_NAME | 如果該列是字符數(shù)據(jù)或 text數(shù)據(jù)類型,那么為字符集返回唯一的名稱。否則,返回 NULL。 |
| COLLATION_NAME | 排序規(guī)則,如果列是字符數(shù)據(jù)或 text數(shù)據(jù)類型,那么為排序次序返回唯一的名稱。否則,返回 NULL。 |
附:1分鐘導(dǎo)出MySQL的數(shù)據(jù)字典
利用mysql的information_schema中的COLUMNS表和navicat中的導(dǎo)出功能實(shí)現(xiàn)快速導(dǎo)出數(shù)據(jù)字典,來(lái)看一下該表的表結(jié)構(gòu)
CREATE TEMPORARY TABLE `COLUMNS` ( `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT'', `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT'', `TABLE_NAME` varchar(64) NOT NULL DEFAULT '', `COLUMN_NAME` varchar(64) NOT NULL DEFAULT'', `ORDINAL_POSITION` bigint(21) unsigned NOT NULL DEFAULT '0', `COLUMN_DEFAULT` longtext, `IS_NULLABLE` varchar(3) NOT NULL DEFAULT '', `DATA_TYPE` varchar(64) NOT NULL DEFAULT '', `CHARACTER_MAXIMUM_LENGTH` bigint(21)unsigned DEFAULT NULL, `CHARACTER_OCTET_LENGTH` bigint(21) unsigned DEFAULT NULL, `NUMERIC_PRECISION` bigint(21) unsigned DEFAULT NULL, `NUMERIC_SCALE` bigint(21) unsigned DEFAULTNULL, `DATETIME_PRECISION` bigint(21) unsigned DEFAULT NULL, `CHARACTER_SET_NAME` varchar(32) DEFAULT NULL, `COLLATION_NAME` varchar(32) DEFAULT NULL, `COLUMN_TYPE` longtext NOT NULL, `COLUMN_KEY` varchar(3) NOT NULL DEFAULT '', `EXTRA` varchar(30) NOT NULL DEFAULT '', `PRIVILEGES` varchar(80) NOT NULL DEFAULT '', `COLUMN_COMMENT` varchar(1024) NOT NULL DEFAULT '' ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
例如我需要導(dǎo)出guifan庫(kù)和test庫(kù)的數(shù)據(jù)字典信息:
select TABLE_SCHEMA,TABLE_NAME,COLUMN_TYPE,COLUMN_COMMENT frominformation_schema.columns where TABLE_SCHEMA='guifan' or TABLE_SCHEMA='test'
在查詢結(jié)果頁(yè)面的右上角,有一個(gè)導(dǎo)出功能的按鈕,點(diǎn)一下可以選擇多種導(dǎo)出的格式,如下圖所示

按提示操作導(dǎo)出
OK,這就是我想要的數(shù)據(jù)字典

總結(jié)
到此這篇關(guān)于Mysql生成數(shù)據(jù)字典的原理與實(shí)例的文章就介紹到這了,更多相關(guān)Mysql生成數(shù)據(jù)字典內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL匯總統(tǒng)計(jì)與GROUP BY過濾查詢實(shí)現(xiàn)
這篇文章主要介紹了SQL匯總統(tǒng)計(jì)與GROUP BY過濾查詢實(shí)現(xiàn),GROUP BY 實(shí)質(zhì)是先排序后分組,遵照索引建的最佳左前綴。當(dāng)無(wú)法使用索引時(shí),增大max_length_for_sort_data和sort_buffer參數(shù)的值2023-01-01
通過實(shí)例認(rèn)識(shí)MySQL中前綴索引的用法
這篇文章主要通過實(shí)例來(lái)介紹MySQL中的前綴索引,包括前綴在實(shí)際使用中需要考慮到的長(zhǎng)度問題等,需要的朋友可以參考下2015-05-05
Mysql中禁用與啟動(dòng)觸發(fā)器教程【推薦】
在使用MYSQL過程中,經(jīng)常會(huì)使用到觸發(fā)器,但是有時(shí)使用不當(dāng)會(huì)造成一些麻煩。下面小編給大家?guī)?lái)了Mysql中禁用與啟動(dòng)觸發(fā)器教程,感興趣的朋友一起看看吧2018-08-08
mysql?數(shù)據(jù)備份與恢復(fù)使用詳解(超完整詳細(xì)教程)
這篇文章主要介紹了mysql?數(shù)據(jù)備份與恢復(fù)使用詳解,根據(jù)實(shí)際的業(yè)務(wù)需求,經(jīng)驗(yàn)參考可以據(jù)數(shù)據(jù)規(guī)模大小,服務(wù)器磁盤容量,大致是分為全備和增備,差異備份,本文給大家詳細(xì)講解需要的朋友可以參考下2022-11-11
MYSQL的主從復(fù)制知識(shí)點(diǎn)整理
在本篇文章里小編給大家整理的是一篇關(guān)于MYSQL主從復(fù)制的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。2019-11-11
PHP MYSQL注入攻擊需要預(yù)防7個(gè)要點(diǎn)
這篇文章主要介紹了PHP MYSQL開發(fā)中,對(duì)于注入攻擊需要預(yù)防的7個(gè)要點(diǎn),大家需要注意了2013-11-11
MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn)
這篇文章主要介紹了MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn),幫助大家更好的對(duì)新版本的MySQL進(jìn)行測(cè)試使用,感興趣的朋友可以了解下2021-04-04

