В процессе разработки должны были быть ситуации, когда необходимо было пакетно изменить имя индекса в определенной библиотеке.Все еще проблематично изменить одну таблицу за одной таблицей.Следующий 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 -- 过滤掉组合索引
);