在开发过程中肯定都有过需要批量改某个库中索引名的情况,一个表一个表的改还是麻烦的,下面的sql中对索引以表名_字段名
的格式生成了指定数据库中所有索引的修改语句:
组合索引的索引名格式为
表名_组合索引字段名1_组合索引字段名2.....
如有其他需求可以自行更改;
使用前注意修改table_schema
指定的数据库名;
-- 批量更新索引名的sql
-- 查询出所有组合索引,并拼接修改索引名的语句
SELECT
CONCAT( 'ALTER TABLE `', table_name, '` RENAME INDEX `', index_name, '` TO `', table_name, '_', GROUP_CONCAT( column_name ORDER BY seq_in_index SEPARATOR '_' ), '`;' ) AS RENAME_SQL
FROM
information_schema.statistics
WHERE
table_schema = 'asset_manage_local'
AND index_name != 'PRIMARY'
GROUP BY
table_name,
index_name
HAVING
COUNT(*) > 1 -- 只处理组合索引
UNION ALL
-- 查询出所有非组合索引,并拼接修改索引名的语句
SELECT
CONCAT(
'ALTER TABLE `',
table_name,
'` RENAME INDEX `',
index_name,
'` TO `',
table_name,
'_',
column_name,
IF
( sub_part IS NOT NULL, CONCAT( '(', sub_part, ')' ), '' ),
'`;'
) AS RENAME_SQL
FROM
information_schema.statistics
WHERE
table_schema = 'asset_manage_local'
AND index_name != 'PRIMARY'
AND seq_in_index = 1
AND index_name NOT IN ( SELECT index_name FROM information_schema.statistics WHERE table_schema = 'asset_manage_local' GROUP BY table_name, index_name HAVING COUNT(*) > 1 -- 过滤掉组合索引
);