Настройки темы

Массовое переименование таблиц в MySQL

Массовое переименование таблиц в MySQL - иногда необходимо массово заменить таблицы с помощью SQL запроса в Базе данных, данное решение поможет в этом вопросе.

 
Подготовка

 

Переменные:

  • Test_BD - Название вашей базы данных
  • Table_1 - Таблица которая текущая или её часть
  • Table_2 - В то что надо переименовать (будет по итогу)


  1. Создайте резервную копию базы данных:
    mysqldump -u username -p Test_BD > Test_BD_backup.sql
    
  2. Получите список всех таблиц:
    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


Рекомендуется выполнять переименование в непиковое время для минимизации влияния на работу системы.

До скачивания осталось: 30 сек.

Вы можете зарегистрироваться чтобы не ждать!

Комментарии (0)

Имя*
E-Mail