Мой провайдер установлен на моем сайте Drupal CMS. Теперь мне нужно скопировать все мои данные со старого сайта. У меня есть таблицы без префиксов в моей старой БД, но в новой БД все таблицы имеют префикс dp_[table_name]
.
Как я могу изменить префиксы во всех таблицах в моей базе данных MySQL?
Ответ 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;
И тогда вам будет предложено несколько запросов, необходимых для изменения всех таблиц в вашей базе данных. Вы просто должны скопировать это, запустить его и вуаля!