Mysql 데이터베이스의 색인 이름을 배치로 수정

개발 과정에서 특정 라이브러리에서 인덱스 이름을 일괄적으로 변경해야 하는 상황이 있었을 텐데, 여전히 한 테이블씩 변경하는 것은 번거로운 일입니다. 인덱스 형식의 데이터베이스 表名_字段名:

복합 색인의 색인 이름 형식은 表名_组合索引字段名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 -- 过滤掉组合索引
	);

추천

출처blog.csdn.net/TangBoBoa/article/details/130412474