Ändern Sie den Indexnamen in der MySQL-Datenbank stapelweise

Während des Entwicklungsprozesses muss es Situationen gegeben haben, in denen es notwendig war, den Indexnamen in einer bestimmten Bibliothek stapelweise zu ändern. Es ist immer noch mühsam, Tabelle für Tabelle zu ändern. Die folgende SQL generiert eine Änderungsanweisung für alle Indizes in der angegebenen Datenbank im Format des Index 表名_字段名:

Das Format des Indexnamens des zusammengesetzten Indexes 表名_组合索引字段名1_组合索引字段名2.....kann geändert werden, wenn es andere Anforderungen gibt; achten Sie darauf, den angegebenen Datenbanknamen
vor der Verwendung zu ändern;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 -- 过滤掉组合索引
	);

Supongo que te gusta

Origin blog.csdn.net/TangBoBoa/article/details/130412474
Recomendado
Clasificación