Mysql生成數(shù)據(jù)字典的原理與實(shí)例
生成原理
在MySQL中,有個(gè)自帶的數(shù)據(jù)庫,名為information_schema。其中保存著關(guān)于MySQL服務(wù)器所維護(hù)的所有其他數(shù)據(jù)庫的信息。如數(shù)據(jù)庫名,數(shù)據(jù)庫的表,表欄的數(shù)據(jù)類型與訪問權(quán) 限等。我們通過查詢這個(gè)數(shù)據(jù)庫的COLUMNS表(此表提供了其他所有表中的列信息)信息,來獲取我們需要的表結(jié)構(gòu)信息,從而將其導(dǎo)出為數(shù)據(jù)字典。
生成實(shí)例
navicat 執(zhí)行以下SQL的查詢(如果需要其他字段,請參考下面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ù)庫' 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ù)庫名 |
DATA_TYPE | 數(shù)據(jù)類型 |
DATETIME_PRECISION | datetime 及 SQL-92 interval 數(shù)據(jù)類型的子類型代碼。對于其它數(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 | 以字符為單位的最大長度,適于二進(jìn)制數(shù)據(jù)、字符數(shù)據(jù),或者文本和圖像數(shù)據(jù)。否則,返回NULL。 |
CHARACTER_OCTET_LENGTH | 以字節(jié)為單位的最大長度,適于二進(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ù)字典,來看一下該表的表結(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庫和test庫的數(shù)據(jù)字典信息:
select TABLE_SCHEMA,TABLE_NAME,COLUMN_TYPE,COLUMN_COMMENT frominformation_schema.columns where TABLE_SCHEMA='guifan' or TABLE_SCHEMA='test'
在查詢結(jié)果頁面的右上角,有一個(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)容請搜索腳本之家以前的文章或繼續(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)無法使用索引時(shí),增大max_length_for_sort_data和sort_buffer參數(shù)的值2023-01-01mysql?數(shù)據(jù)備份與恢復(fù)使用詳解(超完整詳細(xì)教程)
這篇文章主要介紹了mysql?數(shù)據(jù)備份與恢復(fù)使用詳解,根據(jù)實(shí)際的業(yè)務(wù)需求,經(jīng)驗(yàn)參考可以據(jù)數(shù)據(jù)規(guī)模大小,服務(wù)器磁盤容量,大致是分為全備和增備,差異備份,本文給大家詳細(xì)講解需要的朋友可以參考下2022-11-11PHP MYSQL注入攻擊需要預(yù)防7個(gè)要點(diǎn)
這篇文章主要介紹了PHP MYSQL開發(fā)中,對于注入攻擊需要預(yù)防的7個(gè)要點(diǎn),大家需要注意了2013-11-11MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn)
這篇文章主要介紹了MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn),幫助大家更好的對新版本的MySQL進(jìn)行測試使用,感興趣的朋友可以了解下2021-04-04