• mysql / pgsql 使用sql语句查询数据库所有表注释已经表字段注释


    mysql使用sql语句查询数据库所有表注释已经表字段注释(转载)

     

    场景:

    1. 要查询数据库 "mammothcode" 下所有表名以及表注释

    /* 查询数据库 ‘mammothcode’ 所有表注释 */
    SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema='mammothcode';

    2. 要查询表字段的注释

    /* 查询数据库 ‘mammothcode’ 下表 ‘t_adminuser’ 所有字段注释 */
    SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='t_adminuser' AND table_schema='mammothcode'

    3. 一次性查询数据库 "mammothcode" 下表注释以及对应表字段注释

    SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_TYPE,c.COLUMN_COMMENT FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c WHERE c.TABLE_NAME=t.TABLE_NAME AND t.`TABLE_SCHEMA`='mammothcode'

    扩展:使用存储过程,对上面sql语句进行存储,sql如下:

    复制代码
    DELIMITER//  
    DROP PROCEDURE IF EXISTS findComment//
    CREATE PROCEDURE findComment (dbName VARCHAR(50))
    BEGIN  
       DECLARE stmt VARCHAR(65535);  
       #如果用户名长度大于0
       IF LENGTH(dbName)>0 THEN
         BEGIN
           SET @sqlstr=CONCAT('SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_TYPE,c.COLUMN_COMMENT FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c WHERE c.TABLE_NAME=t.TABLE_NAME AND t.`TABLE_SCHEMA`=','''',dbName,'''');
          END;
       ELSE
         BEGIN
          SET @sqlstr=CONCAT('SELECT ','''','数据库名不能为空','''', 'AS ','''','提示','''');
         END;
         END IF;
       PREPARE stmt FROM @sqlstr;
       EXECUTE stmt;
    END//
    DELIMITER ;
    复制代码

    调用存储过程:

    CALL findComment('xiyinli_test');

    上面的存储过程还可以简化:在存储过程中直接查询当前使用的数据库,如下:

    复制代码
    DELIMITER//  
    DROP PROCEDURE IF EXISTS findComment//
    CREATE PROCEDURE findComment ()
    BEGIN  
       DECLARE stmt VARCHAR(65535);  
       #查询当前的 use-->database
       SET @dbName=(SELECT DATABASE());
         BEGIN
           SET @sqlstr=CONCAT('SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_TYPE,c.COLUMN_COMMENT FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c WHERE c.TABLE_NAME=t.TABLE_NAME AND t.`TABLE_SCHEMA`=','''',@dbName,'''');
          END;
       PREPARE stmt FROM @sqlstr;
       EXECUTE stmt;
    END//
    DELIMITER ;
    复制代码

    调用:

    CALL findComment();

    转载自:http://blog.csdn.net/cicon/article/details/51577655

    获取表名及注释:

    select relname as tabname,cast(obj_description(relfilenode,'pg_class') as varchar) as comment from pg_class c 
    where  relkind = 'r' and relname not like 'pg_%' and relname not like 'sql_%' order by relname

    过滤掉分表:

    加条件 and relchecks=0 即可

    获取字段名、类型、注释、是否为空:
    SELECT col_description(a.attrelid,a.attnum) as comment,format_type(a.atttypid,a.atttypmod) as type,a.attname as name, a.attnotnull as notnull   
    FROM pg_class as c,pg_attribute as a where c.relname = '表名' and a.attrelid = c.oid and a.attnum>0

  • 相关阅读:
    [luoguP2463] [SDOI2008]Sandy的卡片(后缀数组 + st表)
    [luoguP3302] [SDOI2013]森林(主席树 + 启发式合并 + lca)
    [luoguP2526] [SHOI2001]小狗散步(二分图最大匹配)
    [luoguP3231] [HNOI2013]消毒(最小点覆盖 + 状压)
    [luoguP1963] [NOI2009]变换序列(二分图最大匹配)
    [luoguP1129] [ZJOI2007]矩阵游戏(二分图最大匹配)
    [luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)
    [luoguP2569] [SCOI2010]股票交易(DP + 单调队列)
    SICP:2,4 序对的过程性表示方法
    SICP:1.43重复调用函数
  • 原文地址:https://www.cnblogs.com/zengpeng/p/9878546.html
Copyright © 2020-2023  润新知