Команда SQL RENAME TABLE - PullRequest
       7

Команда SQL RENAME TABLE

2 голосов
/ 15 апреля 2010

Я могу бежать RENAME TABLE student TO student_new ;
Команда такая же, и ей легко следовать.

Есть ли способы переименовать множество таблиц в простую команду. Предположим, что все таблицы принадлежат одному и тому же имени БД.

Мне не нужно писать много кода, как показано ниже?

RENAME TABLE pre_access TO pre_new_access; 
RENAME TABLE pre_activities TO pre_new_activities;
RENAME TABLE pre_activityapplies TO pre_new_activityapplies;
RENAME TABLE pre_adminactions TO pre_new_adminactions;
RENAME TABLE pre_admincustom TO pre_new_admincustom;
RENAME TABLE pre_admingroups TO pre_new_admingroups;
RENAME TABLE pre_adminnotes TO pre_new_adminnotes;
...

(все еще так много таблиц нужно переименовать)

Обновление: MySQL Used.

Ответы [ 4 ]

5 голосов
/ 15 апреля 2010

Исходя из вашего комментария, что вы используете MySQL, вы сможете "выбрать" необходимые операторы из information_schema.tables, который содержит список ваших таблиц.

Замените your_schema именем вашей схемы и проверьте выбранные строки перед их выполнением.

Select Concat( 'RENAME TABLE ', table_name, ' TO ', 'new_', table_name, ';' )
From information_schema.tables
Where table_schema = 'your_schema';

возвращает

RENAME TABLE c_data TO new_c_data;
RENAME TABLE c_main TO new_c_main;
...
2 голосов
/ 15 апреля 2010

Вы всегда можете сгенерировать простой скрипт PHP, который просматривает базы данных и переименовывает их на основе выражения REGEX.

1 голос
/ 15 апреля 2010

Вы не упоминаете, какую базу данных вы используете, и это полностью зависит от базы данных (некоторые СУБД даже не позволяют переименовывать таблицы). Однако я не знаю ни одной системы СУБД, которая бы позволяла использовать подстановочные знаки в команде RENAME, поэтому да, вам, вероятно, придется отправлять каждую команду отдельно.

0 голосов
/ 15 апреля 2010

для базы данных mysql "test" должен работать:

echo "show tables"|mysql test|perl -ne 'if(/pre_(\w+)/){print "rename table pre_$1 to pre_new_$1;\n"}'|mysql test
...