テーブル定義書が欲しいと思いSQLでMarkdownを出力するようにしました。
ちなみに普通にテーブル定義書を出力するA5:SQL Mk-2というソフトがありますが、こちらはエクセルになります。
出力情報
- テーブル定義
- INDEX定義
必要に応じて機能を追加していきます。
SQL
使用方法は簡単です。
下記SQLを実行して出力結果がMarkdownなので貼り付けるだけ。
クライアントの結果によっては調整などが必要になるかも知れないのでご注意ください。
-- Mysql テーブル、INDEX定義マークダウン出力 SELECT CONCAT( COLUMN_NAME , COLUMN_DEFAULT , IS_NULLABLE , COLUMN_TYPE , COLUMN_KEY , EXTRA , COLUMN_COMMENT ) AS Markdown FROM ( SELECT '' AS TABLE_NAME , CONCAT('\r\n# ', schema_name) AS COLUMN_NAME , '' AS COLUMN_DEFAULT , '' AS IS_NULLABLE , '' AS COLUMN_TYPE , '' AS COLUMN_KEY , '' AS EXTRA , '' AS COLUMN_COMMENT , '-99' AS ORDINAL_POSITION FROM information_schema.schemata WHERE schema_name = database() UNION ALL SELECT TABLE_NAME , CONCAT('\r\n## ', TABLE_NAME) AS COLUMN_NAME , IF(LENGTH(TABLE_COMMENT) > 0, CONCAT('(', TABLE_COMMENT, ')'), '' ) AS COLUMN_DEFAULT , '\r\n### テーブル定義' AS IS_NULLABLE , '' AS COLUMN_TYPE , '' AS COLUMN_KEY , '' AS EXTRA , '' AS COLUMN_COMMENT , '-2' AS ORDINAL_POSITION FROM information_schema.tables WHERE table_schema = database() UNION ALL SELECT TABLE_NAME , '| 列名 ' AS COLUMN_NAME , '| デフォルト ' AS COLUMN_DEFAULT , '| NULL ' AS IS_NULLABLE , '| 型 ' AS COLUMN_TYPE , '| キー ' AS COLUMN_KEY , '| その他 ' AS EXTRA , '| コメント ' AS COLUMN_COMMENT , '-1' AS ORDINAL_POSITION FROM information_schema.tables WHERE table_schema = database() UNION ALL SELECT TABLE_NAME , '|---' AS COLUMN_NAME , '|---' AS COLUMN_DEFAULT , '|---' AS IS_NULLABLE , '|---' AS COLUMN_TYPE , '|---' AS COLUMN_KEY , '|---' AS EXTRA , '|---|' AS COLUMN_COMMENT , '0' AS ORDINAL_POSITION FROM information_schema.tables WHERE table_schema = database() UNION ALL SELECT TABLE_NAME , CONCAT('| ', COLUMN_NAME) , CONCAT('| ', IFNULL(COLUMN_DEFAULT, '')) , CONCAT('| ', IS_NULLABLE) , CONCAT('| ', COLUMN_TYPE) , CONCAT('| ', COLUMN_KEY) , CONCAT('| ', EXTRA) , CONCAT('| ', COLUMN_COMMENT, '|') , ORDINAL_POSITION FROM information_schema.columns WHERE table_schema = database() UNION ALL SELECT DISTINCT TABLE_NAME , '\r\n### INDEX情報\r\n| INDEX名 ' AS COLUMN_NAME , '| INDEX列 ' AS COLUMN_DEFAULT , '| UNIQUE ' AS IS_NULLABLE , '|コメント |' AS COLUMN_TYPE , '' AS COLUMN_KEY , ' ' AS EXTRA , '' AS COLUMN_COMMENT , '1001' AS ORDINAL_POSITION FROM information_schema.statistics WHERE table_schema = database() UNION ALL SELECT DISTINCT TABLE_NAME , '|---' AS COLUMN_NAME , '|---' AS COLUMN_DEFAULT , '|---' AS IS_NULLABLE , '|---|' AS COLUMN_TYPE , '' AS COLUMN_KEY , '' AS EXTRA , '' AS COLUMN_COMMENT , '1002' AS ORDINAL_POSITION FROM information_schema.statistics WHERE table_schema = database() UNION ALL SELECT TABLE_NAME , CONCAT('| ', INDEX_NAME) AS COLUMN_NAME , CONCAT( '| ' , GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) ) AS COLUMN_DEFAULT , CONCAT('| ', IF (NON_UNIQUE = 0, 'UNIQUE', '')) AS IS_NULLABLE , CONCAT('| ', COMMENT, '|') AS COLUMN_TYPE , '' AS COLUMN_KEY , '' AS EXTRA , '' AS COLUMN_COMMENT , '1003' AS ORDINAL_POSITION FROM information_schema.statistics WHERE table_schema = database() GROUP BY TABLE_NAME , INDEX_NAME ) temp ORDER BY TABLE_NAME , CAST(ORDINAL_POSITION AS SIGNED);
出力結果
こちらが出力結果になります。
サンプルとしてMysql公式のサンプルのworldDBで使用した出力結果になります。
# world ## city ### テーブル定義 | 列名 | デフォルト | NULL | 型 | キー | その他 | コメント |---|---|---|---|---|---|---| | ID| | NO| int(11)| PRI| auto_increment| | | Name| | NO| char(35)| | | | | CountryCode| | NO| char(3)| MUL| | | | District| | NO| char(20)| | | | | Population| 0| NO| int(11)| | | | ### INDEX情報 | INDEX名 | INDEX列 | UNIQUE |コメント | |---|---|---|---| | CountryCode| CountryCode| | | | PRIMARY| ID| UNIQUE| | ## country ### テーブル定義 | 列名 | デフォルト | NULL | 型 | キー | その他 | コメント |---|---|---|---|---|---|---| | Code| | NO| char(3)| PRI| | | | Name| | NO| char(52)| | | | | Continent| Asia| NO| enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America')| | | | | Region| | NO| char(26)| | | | | SurfaceArea| 0.00| NO| decimal(10,2)| | | | | IndepYear| | YES| smallint(6)| | | | | Population| 0| NO| int(11)| | | | | LifeExpectancy| | YES| decimal(3,1)| | | | | GNP| | YES| decimal(10,2)| | | | | GNPOld| | YES| decimal(10,2)| | | | | LocalName| | NO| char(45)| | | | | GovernmentForm| | NO| char(45)| | | | | HeadOfState| | YES| char(60)| | | | | Capital| | YES| int(11)| | | | | Code2| | NO| char(2)| | | | ### INDEX情報 | INDEX名 | INDEX列 | UNIQUE |コメント | |---|---|---|---| | PRIMARY| Code| UNIQUE| | ## countrylanguage ### テーブル定義 | 列名 | デフォルト | NULL | 型 | キー | その他 | コメント |---|---|---|---|---|---|---| | CountryCode| | NO| char(3)| PRI| | | | Language| | NO| char(30)| PRI| | | | IsOfficial| F| NO| enum('T','F')| | | | | Percentage| 0.0| NO| decimal(4,1)| | | | ### INDEX情報 | INDEX名 | INDEX列 | UNIQUE |コメント | |---|---|---|---| | CountryCode| CountryCode| | | | PRIMARY| CountryCode,Language| UNIQUE| |
0 件のコメント :
コメントを投稿