SQL奇技淫巧(02):批量添加字段注释、导出数据库字典

平时用mysql比较多,有时候需要详细的数据库设计表结构和数据字典,但又没有最新的文档,这个时候直接从数据导出是最新最全的。在MySQL数据库中利用information_schema库中的COLUMNS表可以快速生成数据字典文档,其实MySQL内部对表结构进行了存储,只需找到对应的存储表导出。
  Navicat中的导出功能实现快速导出数据字典,首先查看该表的表结构,再根据实际需要导出查询结果。

查询指定数据库所有表结构信息

SELECT
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME,
    COLUMN_TYPE,
    COLUMN_COMMENT
FROM    information_schema. COLUMNS
WHERE    TABLE_SCHEMA = 'db_name'      #db_name代表数据库名

查询指定数据库所有表结构信息

SELECT
    TABLE_SCHEMA AS '数据库名',
    TABLE_NAME AS '表名',
    COLUMN_NAME AS '列名',
    COLUMN_TYPE AS '类型',
    COLUMN_DEFAULT AS '默认值',
    IS_NULLABLE AS '允许为空',
    DATA_TYPE AS '数据类型',
    CHARACTER_MAXIMUM_LENGTH AS '字符最大长度',
    NUMERIC_PRECISION AS '数字精度',
    NUMERIC_SCALE AS '小数位数',   
    COLUMN_COMMENT AS '字段说明'
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'db_name'        #db_name代表数据库名

查询指定数据库的所有表结构信息

select * from information_schema.columns where TABLE_SCHEMA='db_name'     #db_name代表数据库名

查询指定表的所有字段信息(在msyql命令行查询)

USE information_schema;                   #使用数据 information_schema
show full columns from tb_name;           #tb_name代表表名

导出查询结果

SQL奇技淫巧(02):批量添加字段注释、导出数据库字典

oracle导出数据字典

SELECT A.TABLE_NAME AS "表名",A.COLUMN_NAME AS "字段名", DECODE(A.CHAR_LENGTH,0,DECODE(A.DATA_SCALE,NULL,A.DATA_TYPE,A.DATA_TYPE||'('||A.DATA_PRECISION||','||A.DATA_SCALE||')'), A.DATA_TYPE||'('||A.CHAR_LENGTH||')') as "字段类型",A.DATA_DEFAULT AS "默认值",A.NULLABLE AS "能否为空",B.comments AS "备注"FROM sys.all_tab_columns A,sys.DBA_COL_COMMENTS BWHERE A.owner=B.owner AND A.table_name=B.table_name AND A.COLUMN_NAME=B.COLUMN_NAME AND A.owner='guoqiang' ANDA.TABLE_NAME IN ('TB_SUBJECT', 'TB_SUBJECT_BALANCE', 'TB_VOUCHER', 'TB_VOUCHER_DETAILS', 'TB_CUSTOMER', 'TB_VOUCHER_CLASSIFY_MODE', 'TB_VOUCHER_TYPE', 'TB_ASSET', 'TB_ASSET_CATALOG', 'TB_M_DM_ASSETS_LIABI_RPT', 'TB_M_DM_PROFIT_RPT', 'TB_M_DM_REVENUE_RPT', 'TB_M_DM_COST_RPT')ORDER BY A.TABLE_NAME

在实际项目中存在很多表和字段并没有注释和字段说明,导出的很多空白说明。所以我们需要批量添加注释。下面的sql就有用武之地了。

给字段批量添加注释

SELECT     
concat(    
    'alter table ',     
    table_schema, '.', table_name,     
    ' modify column ', column_name, ' ', column_type, ' ',     
    if(is_nullable = 'YES', ' ', 'not null '),     
    if(column_default IS NULL, '',     
        if(    
            data_type IN ('char', 'varchar')     
            OR     
            data_type IN ('date', 'datetime', 'timestamp') AND column_default != 'CURRENT_TIMESTAMP',     
            concat(' default ''', column_default,''''),     
            concat(' default ', column_default)    
        )    
    ),     
    if(extra is null or extra='','',concat(' ',extra)),  
    ' comment ''', column_comment, ''';'    
) '组合语句'    
FROM information_schema.columns    
WHERE table_schema = 'srm-supplier' -- 库名    --    AND table_name = 'h_test' -- 表名

给表批量添加注释

select concat("alter table " ,TABLE_NAME, " comment ", "'",TABLE_COMMENT,"'",";") from information_schema.tables 
where information_schema.tables.TABLE_SCHEMA='srm-supplier' and information_schema.tables.TABLE_TYPE='BASE TABLE';

将字段注释设置为字段名称

SELECT     
concat(    
    'alter table ',     
    table_schema, '.', table_name,     
    ' modify column ', column_name, ' ', column_type, ' ',     
    if(is_nullable = 'YES', ' ', 'not null '),     
    if(column_default IS NULL, '',     
        if(    
            data_type IN ('char', 'varchar')     
            OR     
            data_type IN ('date', 'datetime', 'timestamp') AND column_default != 'CURRENT_TIMESTAMP',     
            concat(' default ''', column_default,''''),     
            concat(' default ', column_default)    
        )    
    ),     
    if(extra is null or extra='','',concat(' ',extra)),  
    ' comment ''', COLUMN_NAME, ''';'    
) '组合语句'    
FROM information_schema.columns    
WHERE table_schema = 'srm-supplier' and COLUMN_COMMENT ='';-- 库名    --  
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章