MySQL生成批量操作数据库表脚本语句

-- 3.1 生成批量操作数据库表脚本语句

-- 1. 生成删除数据库表脚本语句
SELECT
    CONCAT( 'DROP TABLE IF EXISTS ', t.TABLE_SCHEMA,'.`', t.TABLE_NAME, '` ;' ) 
FROM
    information_schema.`TABLES` t 
WHERE t.TABLE_SCHEMA NOT IN ('information_schema','performance_schema','sys','mysql')
    AND t.TABLE_COMMENT <> 'VIEW' 
ORDER BY
    t.TABLE_SCHEMA
    ;

    
-- 2. SHOW CREATE TABLE  -
SHOW CREATE TABLE zhxx_six_mes.agv_dispatch_deploy;    
    
    
-- 2.没有注释的表添加注释为:【未知,待验证】
--  ALTER TABLE `hh_log`.`employees` COMMENT = '【未启用】'; 
    SELECT
    CONCAT( 'ALTER TABLE  ', t.TABLE_SCHEMA,'.`',t.TABLE_NAME, '`', ' COMMENT=\'【未知,待验证】',''' ;' ) 
FROM
    information_schema.`TABLES` t 
WHERE t.TABLE_SCHEMA NOT IN ('information_schema','performance_schema','sys','mysql')
    AND t.TABLE_COMMENT <> 'VIEW' 
    AND t.TABLE_COMMENT = ''
ORDER BY
    t.TABLE_SCHEMA
    ;
    
    -- 3. 通过优化后,给表记录为0的添加注释 【未启用】 + ;
SELECT
    CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' COMMENT=\'【未启用】', t.TABLE_COMMENT,''' ;' ) 
FROM
    information_schema.`TABLES` t 
WHERE t.TABLE_SCHEMA NOT IN ('information_schema','performance_schema','sys','mysql')
    AND t.TABLE_COMMENT <> 'VIEW' 
    AND t.TABLE_ROWS = 0 
ORDER BY
    t.TABLE_SCHEMA
    ;

-- 3.1 生产库添加注释:
SELECT
    CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' COMMENT=\'', t.TABLE_COMMENT,''' ;' ) 
FROM
    information_schema.`TABLES` t 
WHERE t.TABLE_SCHEMA  IN ('mes')
    AND t.TABLE_COMMENT <> 'VIEW' 
  AND t.TABLE_COMMENT > ''
ORDER BY
    t.TABLE_SCHEMA
    ;
    
-- 4. 字符字段修改字符集
-- ALTER TABLE `zhxx_six_mes`.`auth_role` MODIFY COLUMN `name` varchar(20) NULL DEFAULT NULL COMMENT '角色名称' ;
SELECT
CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', '  MODIFY COLUMN `', c.COLUMN_NAME,'` ',c.column_type,' NULL DEFAULT NULL COMMENT ','\'',c.column_comment,'\' ;' ) 
FROM
    information_schema.`COLUMNS` c,
    information_schema.`TABLES` t
WHERE
    c.TABLE_SCHEMA  IN ('mes')
AND t.TABLE_SCHEMA  IN ('mes')
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_COMMENT <> 'VIEW' 
-- AND c.character_set_name = 'utf8'
AND c.COLLATION_NAME IS NOT NULL
AND c.IS_NULLABLE = 'YES'
;

-- 5.修改表为统一 InnDB ,如果报1031的错误,需要先修改row_format的参数;
-- 错误:1031  - Table storage engine for '#sql-195_30' doesn't have this option
-- ALTER TABLE `zhxx_fb_mes1`.hibernate_sequence ROW_FORMAT = DEFAULT ;
SELECT 
CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' ROW_FORMAT = DEFAULT ;')  
FROM 
    information_schema.TABLES t
WHERE
    t.table_schema = 'mes'
AND t.TABLE_COMMENT <> 'VIEW'
AND t.ENGINE <> 'InnoDB'
;
-- ALTER TABLE  `zhxx_six_mes`.`auth_menu` ENGINE = InnoDB;
SELECT 
CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' ENGINE = InnoDB; ')  
FROM 
    information_schema.TABLES t
WHERE
    t.table_schema = 'mes'
AND t.TABLE_COMMENT <> 'VIEW'
AND t.ENGINE <> 'InnoDB'
;
--  修改表的编码格式:
-- ALTER TABLE `zhxx_mes`.`agv_request` CHARACTER SET = utf8mb4, COLLATE = utf8mb4_general_ci;
SELECT 
CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' CHARACTER SET = utf8mb4, COLLATE = utf8mb4_general_ci; ')  
FROM 
    information_schema.TABLES t
WHERE
    t.table_schema = 'mes'
AND t.TABLE_COMMENT <> 'VIEW'
-- MySQL 8.0
-- AND t.TABLE_TYPE <> 'VIEW'
;


-- 6. 添加索引 :
-- ALTER TABLE `zhxx_six_mes`.`produce_process_log` ADD INDEX `idx_create_time`(`create_time`);
 -- 编码类字段添加索引
 /*
AND c.column_name  LIKE '%code'
AND c.column_name  LIKE '%_no'
AND c.column_name  LIKE '%name'
AND c.column_name  LIKE '%_number'
*/

-- 父类ID,类型等枚举字段
/*
AND c.column_name  LIKE '%_id'
AND c.column_name  LIKE '%_type'
AND c.column_name  LIKE 'is_%'
AND c.column_name  LIKE '%type'
AND c.column_name  LIKE '%status'
AND c.column_name  LIKE '%state'
*/

-- 时间类字段
/*
AND c.column_name NOT LIKE 'gmt_%'
AND c.column_name NOT LIKE '%time'
AND c.column_name NOT LIKE '%_create'
AND c.column_name NOT LIKE '%_update'
*/

-- 用户,评级类字段
/*
AND c.column_name NOT LIKE '%user'
AND c.column_name NOT LIKE '%_level'
*/
SELECT
 CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' ADD INDEX ', ' `idx_',c.COLUMN_NAME,'`  ( `',c.COLUMN_NAME,'` )',' , ALGORITHM=INPLACE, LOCK=NONE;' ) 
FROM
    information_schema.`COLUMNS` c,
    information_schema.`TABLES` t
WHERE
       c.TABLE_SCHEMA = 'eap'
AND t.TABLE_SCHEMA = 'eap'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_COMMENT <> 'VIEW'
AND (
c.column_name  LIKE '%code'
OR c.column_name  LIKE '%_no'
OR c.column_name  LIKE '%name'
OR c.column_name  LIKE '%_number'
OR c.column_name  LIKE '%_id'
OR c.column_name  LIKE '%_type'
OR c.column_name  LIKE 'is_%'
OR c.column_name  LIKE '%type'
OR c.column_name  LIKE '%status'
OR c.column_name  LIKE '%state'
OR c.column_name  LIKE 'gmt_%'
OR c.column_name  LIKE '%time'
OR c.column_name  LIKE '%_create'
OR c.column_name  LIKE '%_update'
OR c.column_name  LIKE '%user'
OR c.column_name  LIKE '%_level'
)
ORDER BY
    t.TABLE_COMMENT
    ;

-- 结尾开头的枚举字段
-- _type%
-- %_id
-- is_%
-- %status
SELECT
 CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' ADD INDEX ', ' `idx_',c.COLUMN_NAME,'`  ( `',c.COLUMN_NAME,'` )',' , ALGORITHM=INPLACE, LOCK=NONE;' ) 
FROM
    information_schema.`COLUMNS` c,
    information_schema.`TABLES` t
WHERE
       c.TABLE_SCHEMA = 'mes'
AND t.TABLE_SCHEMA = 'mes'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_COMMENT <> 'VIEW'
AND c.COLUMN_NAME  LIKE  'code'
ORDER BY
    t.TABLE_COMMENT
    ;
    


-- %_number(18)
-- %_no(18)
-- %_code(18)
SELECT
-- CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' ADD INDEX ', ' `idx_',c.COLUMN_NAME,'`  ( `',c.COLUMN_NAME,'` )',' ;' ) 
CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' ADD INDEX ', ' `idx_',c.COLUMN_NAME,'`  ( `',c.COLUMN_NAME,'`(18) )',' , ALGORITHM=INPLACE, LOCK=NONE;' ) 
FROM
    information_schema.`COLUMNS` c,
    information_schema.`TABLES` t
WHERE
       c.TABLE_SCHEMA = 'mes'
AND t.TABLE_SCHEMA = 'mes'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_COMMENT <> 'VIEW'
AND c.COLUMN_NAME  = 'code'
ORDER BY
    t.TABLE_COMMENT
    ;
    

-- 检查那些字段确实索引(反之,这些字段是要添加索引的)
SELECT DISTINCT c.column_name
FROM
    information_schema.`COLUMNS` c,
    information_schema.`TABLES` t
WHERE
       c.TABLE_SCHEMA = 'mes'
AND t.TABLE_SCHEMA = 'mes'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_COMMENT <> 'VIEW'
AND c.column_name NOT LIKE '%code'
AND c.column_name NOT LIKE '%_no'
AND c.column_name NOT LIKE '%name'
AND c.column_name NOT LIKE '%_number'

AND c.column_name NOT LIKE '%_id'
AND c.column_name NOT LIKE '%_type'
AND c.column_name NOT LIKE 'is_%'
AND c.column_name NOT LIKE '%type'
AND c.column_name NOT LIKE '%status'
AND c.column_name NOT LIKE '%state'

AND c.column_name NOT LIKE 'gmt_%'
AND c.column_name NOT LIKE '%time'
AND c.column_name NOT LIKE '%_create'
AND c.column_name NOT LIKE '%_update'

AND c.column_name NOT LIKE '%user'
AND c.column_name NOT LIKE '%_level'
;
    
-- 7.删除索引 
-- ALTER TABLE `zhxx_six_mes`.`agv_dispatch_deploy` DROP INDEX `idx_crystal_no`;
SELECT
    CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' DROP INDEX ', lower(index_name),' ;' )
    FROM
    information_schema.statistics t
WHERE
    table_schema = 'mes'
AND lower(index_name) <> 'primary' 
AND lower(index_name) LIKE 'idx_%'
;


/*******************************************************************************
 * 标题:1.删除现有索引; 2.添加新索引;
 * 作者:久久 
 * 日期: 
 * 实例环境:【10.10.10.10 / mes 】
 * 版本信息:1.0
 * 内容描述:
 *     按照命名规范修改现有的索引名称
 *   索引命名规则:
 *   1.单列索引命名:idx_表名_字段名;
 *   2.索引长度不超过64个字符,原则上不超过30个字符;
 *   3.联系索引命名:joint_字段名1_字段名2...;
 *   4.唯一索引:unique_idx_字段名;
 *
 * 
 * 
 *********************************************************************************/
-- 查看数据库所有索引
SELECT
    table_name,
    lower(column_name) column_name,
    lower(index_name) index_name,
  non_unique,
    seq_in_index 
FROM
    information_schema.statistics
WHERE
    table_schema = 'mes'
AND lower(index_name) <> 'primary' 
;

-- 只有主键索引的表:
SELECT
  a.TABLE_SCHEMA,
    a.table_name,
    COUNT(*) AS num 
FROM
    information_schema.statistics a 
WHERE
    a.TABLE_SCHEMA NOT IN ( 'information_schema','performance_schema','sys' ,'mysql')
GROUP BY
    a.table_name
HAVING num <= 1    
;

-- 只有主键的表批量生产索引:
SELECT
 CONCAT( 'ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`', ' ADD INDEX ', ' `idx_',c.COLUMN_NAME,'`  ( `',c.COLUMN_NAME,'` )',' , ALGORITHM=INPLACE, LOCK=NONE;' ) 
FROM
    information_schema.`COLUMNS` c,
    information_schema.`TABLES` t,
 (
SELECT
  a.TABLE_SCHEMA,
    a.table_name,
    COUNT(*) AS num 
FROM
    information_schema.statistics a 
WHERE
    a.TABLE_SCHEMA NOT IN ( 'information_schema','performance_schema','sys' ,'mysql')
GROUP BY
    a.table_name
HAVING num <= 1    
) b
WHERE
       c.TABLE_SCHEMA NOT IN ( 'information_schema','performance_schema','sys' ,'mysql')
AND t.TABLE_SCHEMA NOT IN ( 'information_schema','performance_schema','sys' ,'mysql')
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND b.TABLE_SCHEMA = t.TABLE_SCHEMA
AND b.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_COMMENT <> 'VIEW'
AND (
c.column_name  LIKE '%code'
OR c.column_name  LIKE '%_no'
OR c.column_name  LIKE '%name'
OR c.column_name  LIKE '%_number'
OR c.column_name  LIKE '%_id'
OR c.column_name  LIKE '%_type'
OR c.column_name  LIKE 'is_%'
OR c.column_name  LIKE '%type'
OR c.column_name  LIKE '%status'
OR c.column_name  LIKE '%state'
OR c.column_name  LIKE 'gmt_%'
OR c.column_name  LIKE '%time'
OR c.column_name  LIKE '%_create'
OR c.column_name  LIKE '%_update'
OR c.column_name  LIKE '%user'
OR c.column_name  LIKE '%_level'
)
ORDER BY
    t.TABLE_COMMENT
    ;
    

/**
 *1. 删除现有索引;
 */
-- ALTER TABLE  dw_account DROP INDEX user_id;
-- 
-- ALTER TABLE  dw_account_bank DROP INDEX user_id;
-- 

/**
 * 2.添加新索引;
 */
ALTER TABLE dw_borrow ADD INDEX idx_dw_borrow_user_id (user_id) USING BTREE;

ALTER TABLE dw_borrow ADD INDEX idx_dw_borrow_status (STATUS) USING BTREE;


/*******************************************************************************
 * 标题:1.删除现有索引; 2.添加新索引;
 * 作者:永久 
 * 日期:2015-12-08 
 * 实例环境:【生产环境】
 * 版本信息:1.0
 * 内容描述:
 *     按照命名规范修改现有的索引名称
 *   索引命名规则:
 *   1.idx_表名_字段名;
 *   2.索引长度不超过64个字符,原则上不超过30个字符;
 * 
 * 
 *********************************************************************************/
SELECT
    table_name,
    column_name,
    lower(column_name) column_name,
    lower(index_name) index_name,
    lower(index_type) type,
    seq_in_index column_position
FROM
    information_schema.statistics
WHERE
    table_schema = 'mes'
AND lower(index_name) <> 'primary';

-- 1.删除原索引
ALTER TABLE del_qifu_001 DROP INDEX idx_id;

-- 批量修改数据库表的自增ID:
-- ALTER TABLE `zhxx_fb_mes1_four`.`interface_eap_grinding_rack` AUTO_INCREMENT = 10;
SELECT
    t.TABLE_SCHEMA,
    t.TABLE_NAME,
    t.AUTO_INCREMENT 
FROM
    information_schema.TABLES t ;
-- 生产语句:
SELECT
CONCAT('ALTER TABLE  `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`' ,' AUTO_INCREMENT = ',t.AUTO_INCREMENT+100000,' ;' )     
FROM
    information_schema.TABLES t 
WHERE t.TABLE_SCHEMA = 'mes'    
AND t.TABLE_COMMENT <> 'VIEW'
;

-- 表优化
-- OPTIMIZE TABLE `dw_account_log`;
-- 批量生产语句:
SELECT
CONCAT('OPTIMIZE TABLE   `', t.TABLE_SCHEMA,'`.`',t.TABLE_NAME, '`' ,'  ;' )     
FROM
    information_schema.TABLES t 
WHERE t.TABLE_SCHEMA = 'mes'    
AND t.TABLE_COMMENT <> 'VIEW'
;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值