Как я могу изменить префиксы во всех таблицах в моей БД MySQL? - PullRequest
24 голосов
/ 18 марта 2010

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

Ответы [ 4 ]

28 голосов
/ 03 апреля 2012

решение 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.
21 голосов
/ 18 марта 2010

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

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

13 голосов
/ 06 января 2016

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

4 голосов
/ 18 марта 2010

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

...