Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Решение 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:

Оптимизирован запрос только для вызова RENAME TABLE один раз. Что-то, во что я вошел, было то, что конкатенированный выход уселся на 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.

Ответ 2

напишите script, который запустит 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" - ожидаемое имя базы данных

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

Ответ 3

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

Ответ 4

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

Ответ 5

Если там кто-то еще интересуется, как это сделать (поскольку это не сработало из-за других вариантов), вы можете запустить это (конечно, изменив первые три переменные для ваших значений):

SET @database   = "database_name"; 
SET @old_prefix = "old_prefix_"; 
SET @new_prefix = "new_prefix_";
   SELECT
    concat(
        "RENAME TABLE ",
        TABLE_NAME,
        " TO ",
        replace(TABLE_NAME, @old_prefix, @new_prefix),
        ';'
    ) AS "SQL" FROM information_schema.TABLES WHERE TABLE_SCHEMA = @database;

И тогда вам будет предложено несколько запросов, необходимых для изменения всех таблиц в вашей базе данных. Вы просто должны скопировать это, запустить его и вуаля!