Как я могу изменить префиксы во всех таблицах в моей MySQL DB?

мой провайдер установлен на моем сайте Drupal CMS. Теперь мне нужно скопировать все мои данные со старого сайта. У меня есть таблицы без префиксов в моей старой БД, но в новой БД все таблицы имеют dp_[table_name] префикс.

4 ответов


решение zerkms не сработало для меня. Я должен был указать information_schema база данных, чтобы иметь возможность запросить Tables таблица.

SELECT 
    CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='test';

Edit:

оптимизирован запрос только для вызова таблицы переименования один раз. Я столкнулся с тем фактом, что объединенный вывод был усечен на 341 символах. Это можно решить (если это разрешено вашим сервером), установив переменную MySQL group_concat_max_len к более высокому значению:

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters.

напишите сценарий, который будет запускать RENAME TABLE для каждой таблицы.

SELECT 
  GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ')
FROM 
  `TABLES` WHERE `TABLE_SCHEMA` = "test";

где ожидается "test" имя базы данных

после этого вы можете длинный запрос, который добавит префиксы, если вы его выполните; -)


PhpMyAdmin позволяет сделать это сейчас. На уровне "база данных" выберите вкладку структура, чтобы просмотреть все таблицы. Нажмите "Проверить все" (под списком таблицы). В раскрывающемся списке "с выбранным" выберите: "заменить префикс таблицы".


вы можете просто сбросить базу данных, открыть дамп с помощью текстового редактора, заменить все вхождения " создать таблицу "на" создать таблицу dp_ " и восстановить базу данных. Это займет пару минут.