개발 과정에서 특정 라이브러리에서 인덱스 이름을 일괄적으로 변경해야 하는 상황이 있었을 텐데, 여전히 한 테이블씩 변경하는 것은 번거로운 일입니다. 인덱스 형식의 데이터베이스 表名_字段名
:
복합 색인의 색인 이름 형식은
表名_组合索引字段名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 -- 过滤掉组合索引
);