Массовое переименование таблиц в MySQL - иногда необходимо массово заменить таблицы с помощью SQL запроса в Базе данных, данное решение поможет в этом вопросе.
Подготовка
Переменные:
- Test_BD - Название вашей базы данных
- Table_1 - Таблица которая текущая или её часть
- Table_2 - В то что надо переименовать (будет по итогу)
- Создайте резервную копию базы данных:
mysqldump -u username -p Test_BD > Test_BD_backup.sql - Получите список всех таблиц:
SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = 'Test_BD' AND TABLE_NAME LIKE 'Table_1\_%' ESCAPE '\\';
Автоматическое переименование
Способ 1: Через динамический SQL
-- Создаем хранимую процедуру для переименования
DELIMITER //
CREATE PROCEDURE RenameTables()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE old_name VARCHAR(255);
DECLARE new_name VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT TABLE_NAME
FROM information_schema.tables
WHERE table_schema = 'Test_BD'
AND TABLE_NAME LIKE 'Table_1\_%' ESCAPE '\\';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO old_name;
IF done THEN
LEAVE read_loop;
END IF;
SET new_name = REPLACE(old_name, 'Table_1_', 'Table_2_');
SET @sql = CONCAT('RENAME TABLE Test_BD.', old_name, ' TO Test_BD.', new_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
-- Запуск процедуры
CALL RenameTables();
Способ 2: Через скрипт
Получите список таблиц:
SELECT CONCAT('RENAME TABLE Test_BD.', TABLE_NAME, ' TO Test_BD.', REPLACE(TABLE_NAME, 'Table_1_', 'Table_2_'), ';')
FROM information_schema.tables
WHERE table_schema = 'Test_BD'
AND TABLE_NAME LIKE 'Table_1\_%' ESCAPE '\\';
Выполните полученный список запросов
Проверка результатов
-- Проверка переименованных таблиц
SELECT TABLE_NAME
FROM information_schema.tables
WHERE table_schema = 'Test_BD'
AND TABLE_NAME LIKE 'Table_2\_%' ESCAPE '\\';
Важные моменты
- Проверка зависимостей: убедитесь, что все внешние ключи и связи обновлены
- Права доступа: проверьте наличие прав на переименование таблиц
- Код приложения: обновите все упоминания старых названий таблиц в коде
- Триггеры и процедуры: проверьте и обновите все хранимые процедуры
- Откат изменений
Если что-то пошло не так, используйте резервную копию:
mysql -u username -p Test_BD < Test_BD_backup.sql
Рекомендуется выполнять переименование в непиковое время для минимизации влияния на работу системы.
Комментарии (0)