首頁 > 軟體

Mysql生成資料字典的原理與範例

2022-03-24 13:01:52

生成原理

在MySQL中,有個自帶的資料庫,名為information_schema。其中儲存著關於MySQL伺服器所維護的所有其他資料庫的資訊。如資料庫名,資料庫的表,表欄的資料型別與存取權 限等。我們通過查詢這個資料庫的COLUMNS表(此表提供了其他所有表中的列資訊)資訊,來獲取我們需要的表結構資訊,從而將其匯出為資料字典。

生成範例

navicat 執行以下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 '預設值',
    COLUMN_COMMENT AS '註釋'
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE
    TABLE_SCHEMA = '資料庫'
    AND TABLE_NAME = '表';

通過navicat工具進行匯出(如下圖的按鈕,之後自行選擇要匯出的內容);

COLUMNS表欄位拓展:

列名描述
COLUMN_NAME欄位名
COLUMN_TYPE欄位型別
TABLE_CATALOG表限定符。
IS_NULLABLE列的為空性。如果列允許 NULL,那麼該列返回 YES。否則,返回 NO。
COLUMN_KEY欄位主鍵
COLUMN_DEFAULT預設值
COLUMN_COMMENT註釋
ORDINAL_POSITION欄位在表的順序(從1開始)
TABLE_NAME資料表名
TABLE_SCHEMA資料庫名
DATA_TYPE資料型別
DATETIME_PRECISIONdatetime 及 SQL-92 interval 資料型別的子型別程式碼。對於其它資料型別,返回 NULL。
EXTRA額外資訊
GENERATION_EXPRESSION 
NUMERIC_PRECISION近似數位資料、精確數位資料、整型資料或貨幣資料的精度。否則,返回 NULL。
NUMERIC_SCALE近似數位資料、精確數位資料、整數資料或貨幣資料的小數位數。否則,返回 NULL。
PRIVILEGES 
CHARACTER_MAXIMUM_LENGTH以字元為單位的最大長度,適於二進位制資料、字元資料,或者文字和影象資料。否則,返回NULL。
CHARACTER_OCTET_LENGTH以位元組為單位的最大長度,適於二進位制資料、字元資料,或者文字和影象資料。否則,返回 NULL。
CHARACTER_SET_NAME如果該列是字元資料或 text資料型別,那麼為字元集返回唯一的名稱。否則,返回 NULL。
COLLATION_NAME排序規則,如果列是字元資料或 text資料型別,那麼為排序次序返回唯一的名稱。否則,返回 NULL。

附:1分鐘匯出MySQL的資料字典

利用mysql的information_schema中的COLUMNS表和navicat中的匯出功能實現快速匯出資料字典,來看一下該表的表結構

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;

例如我需要匯出guifan庫和test庫的資料字典資訊:

select TABLE_SCHEMA,TABLE_NAME,COLUMN_TYPE,COLUMN_COMMENT frominformation_schema.columns where TABLE_SCHEMA='guifan' or  TABLE_SCHEMA='test'

在查詢結果頁面的右上角,有一個匯出功能的按鈕,點一下可以選擇多種匯出的格式,如下圖所示

按提示操作匯出

OK,這就是我想要的資料字典

總結 

到此這篇關於Mysql生成資料字典的原理與範例的文章就介紹到這了,更多相關Mysql生成資料字典內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com