• 获取批量修改列为大写SQL脚本

 

1 SELECT
2     concat( 'alter table ', TABLE_NAME, ' change column ', COLUMN_NAME, '  ', UCASE( COLUMN_NAME ), '  ', COLUMN_TYPE,' ',EXTRA,' comment "',COLUMN_COMMENT,'";' ) AS '修改脚本'
3 FROM
4     information_schema.COLUMNS
5 WHERE
6     TABLE_SCHEMA = '数据库名'

 

  • 获取批量修改表为小写SQL脚本

 

1 SELECT
2     concat( 'alter table ', TABLE_NAME, ' rename to ', LCASE( TABLE_NAME ), ';' ) AS ‘修改脚本’
3 FROM
4     information_schema.TABLES
5 WHERE
6     TABLE_SCHEMA = '数据库名'

 

  • 获取批量修改表列SQL脚本
1 SELECT
2     concat( 'alter table ', TABLE_NAME, ' modify ', COLUMN_NAME,' decimal(18,3);' ) AS '修改脚本'
3 FROM
4     information_schema.COLUMNS
5 WHERE
6     TABLE_SCHEMA = 'meritdata' AND (COLUMN_TYPE LIKE 'decimal%' or COLUMN_TYPE LIKE 'float%') AND COLUMN_TYPE LIKE '%,2)' AND TABLE_NAME in (
7         'I_AM_TABLE_NAME'
8         )

 

  • 备份SQL查询结果

 

1 mysql -uroot -p -e 'select * from testdb.info'>/opt/supwang/wzz.sql

 

  • 查询数据库表索引(这里我排除了主键)

1 select TABLE_NAME, INDEX_NAME, GROUP_CONCAT(COLUMN_NAME) as INDEX_COLUMN
2 from
3 information_schema.statistics
4 where
5 table_schema='库名' and INDEX_NAME!='PRIMARY'
6 GROUP BY TABLE_NAME, INDEX_NAME;

  

  • 存储过程(查询出记录,然后拼接,union all)

       例子:

select
    'syx0919lb_st1' EC,
    'syx0919lb_st1' EN,
    'syx0919lb' MC,
    'syx0919lb' MN,
    count(*) N
from
    syx0919lb_st1
where
    FLOWSTATUS = 'DONE'
union all
select
    'syx0919lb_st1' EC,
    'syx0919lb_st1' EN,
    'syx0919lb' MC,
    'syx0919lb' MN,
    count(*) N
from
    syx0919lb_st1
where
    FLOWSTATUS = 'DONE'

 

  存储过程:

DROP PROCEDURE IF EXISTS cloud_wzz.TABLE_DATA_NUM;

DELIMITER $$
$$
CREATE PROCEDURE cloud_wzz.TABLE_DATA_NUM()
begin
    DECLARE c_ec,c_en,c_mc,c_mn varchar(250);
    -- 拼接union all的辅助
    DECLARE i INT DEFAULT 0;
    DECLARE done INT DEFAULT 0;
    DECLARE exeSql longtext DEFAULT '';
    -- 定义游标
    DECLARE cur CURSOR FOR SELECT a.code ec,a.name en,b.CODE mc,b.NAME bn FROM mdm_model_entity a,mdm_model b WHERE a.MASTER ='1' AND b.FLOWSTATUS='DONE' AND a.MODELID =b.ID;
    -- 游标循环结束后,设置为1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
    -- 打开游标
    OPEN cur;
    entity_model_loop:LOOP
        FETCH cur INTO c_ec,c_en,c_mc,c_mn;
        IF done=1 THEN
            LEAVE entity_model_loop;
        END IF;
        -- 查询是否存在当前表名,赋值个数给cnt
        SELECT COUNT(1) FROM information_schema.tables WHERE table_name = c_ec INTO @cnt;
        -- 判断表名是否存在,当表不存在时直接跳过,不判断的话会报错
        IF @cnt <> 0 THEN
            SET @selSql=CONCAT("SELECT '",c_ec,"' EC,'",c_en,"' EN,'",c_mc,"' MC,'",c_mn,"' MN,COUNT(*) N FROM ",c_ec," WHERE  FLOWSTATUS ='DONE'");
            IF i <> 0 THEN
                SET @selSql=CONCAT(' union all ',@selSql);
            END IF;
            SET exeSql=CONCAT(exesql,@selSql);
            SET i=i+1;
        END IF;
    END LOOP entity_model_loop;
    -- 关闭游标
    CLOSE cur;
    -- 赋值变量
    SET @v_s=exeSql;
    -- 预定义sql语句
    PREPARE stmt FROM @v_s;
    -- 执行预定义sql语句
    EXECUTE stmt;
    -- 释放资源
    DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

 

 posted on 2020-06-10 11:17  開開心欣  阅读(592)  评论(0编辑  收藏  举报