Как добавить префикс всех таблиц в MySQL - PullRequest
12 голосов
/ 01 ноября 2011

Как добавить префикс ко всем таблицам в MySQL, используя запрос.

Например:

Мне нужно добавить « dr_ » во все таблицы, которые доступны в базе данных mysql.

Ответы [ 4 ]

14 голосов
/ 01 ноября 2011

Запустите все запросы, которые вы получите при выполнении этого запроса:

SELECT Concat('ALTER TABLE `', TABLE_NAME, '` RENAME TO `dr_', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<name of your db>';
13 голосов
/ 01 ноября 2011

Для этого примера я создам базу данных с именем prefixdb с 4 таблицами:

mysql> drop database if exists prefixdb;
Query OK, 4 rows affected (0.01 sec)

mysql> create database prefixdb;
Query OK, 1 row affected (0.00 sec)

mysql> use prefixdb
Database changed
mysql> create table tab1 (num int) ENGINE=MyISAM;
Query OK, 0 rows affected (0.05 sec)

mysql> create table tab2 like tab1;
Query OK, 0 rows affected (0.05 sec)

mysql> create table tab3 like tab1;
Query OK, 0 rows affected (0.05 sec)

mysql> create table tab4 like tab1;
Query OK, 0 rows affected (0.04 sec)

mysql> show tables;
+--------------------+
| Tables_in_prefixdb |
+--------------------+
| tab1               |
| tab2               |
| tab3               |
| tab4               |
+--------------------+
4 rows in set (0.00 sec)

Запрос для его генерации будет

select
    concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';')
from
    (select table_schema db,table_name tb
    from information_schema.tables where
    table_schema='prefixdb') A,
    (SELECT 'dr_' prfx) B
;

Запуск его в командной строке Iполучите это:

mysql> select concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') from (select table_schema db,table_name tb from information_schema.tables where table_schema='prefixdb') A,(SELECT 'dr_' prfx) B;
+----------------------------------------------------------------+
| concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') |
+----------------------------------------------------------------+
| alter table prefixdb.tab1 rename prefixdb.dr_tab1;             |
| alter table prefixdb.tab2 rename prefixdb.dr_tab2;             |
| alter table prefixdb.tab3 rename prefixdb.dr_tab3;             |
| alter table prefixdb.tab4 rename prefixdb.dr_tab4;             |
+----------------------------------------------------------------+
4 rows in set (0.00 sec)

Передайте результат обратно в mysql следующим образом:

mysql -hhostip -uuser -pass -AN -e"select concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') from (select table_schema db,table_name tb from information_schema.tables where table_schema='prefixdb') A,(SELECT 'dr_' prfx) B" | mysql -hhostip -uuser -ppass -AN

Что касается вашего вопроса, если вы хотите переименовать все таблицы, не трогайте базы данных information_schema и mysql,Вместо этого используйте этот запрос:

select
    concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';')
from
    (select table_schema db,table_name tb
    from information_schema.tables where
    table_schema not in ('information_schema','mysql')) A,
    (SELECT 'dr_' prfx) B
;

Попробуйте !!! !!! 1016 *

0 голосов
/ 07 февраля 2016

Добавьте префикс для всех ваших таблиц базы данных.

Предположим, что ваша база данных называется "my_database", а префикс, который вы хотите добавить, - "my_prefix", выполните следующий запрос:

SELECT Concat('ALTER TABLE ', TABLE_NAME, ' RENAME TO my_prefix_', TABLE_NAME, ';') FROM information_schema.tables WHERE table_schema = 'my_database'

Ваш набор результатов будет представлять собой набор запросовчто вы можете скопировать и вставить в ваш любимый редактор MySQL (Sequel Pro, phpMyAdmin, что угодно).Просто вставьте их и выполните, и все готово.

0 голосов
/ 23 января 2013

Чтобы добавить к превосходному и исчерпывающему ответу Роландо.Если вы выполняете запросы RENAME, сгенерированные его запросом SELECT CONCAT (я использовал phpMyAdmin и просто скопировал выходные запросы в окно SQL и нажал кнопку Go), у вас не должно возникнуть проблем с ограничениями внешнего ключа.Я только что сделал это на тестовой базе данных в XAMPP, и все таблицы переименованы, и ограничения остались нетронутыми.Это может показаться очевидным для экспертов по SQL, но, возможно, не так для нас, любителей.

...