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 -- 过滤掉组合索引
);