2010-04-15 5 views
2

Я могу запустить RENAME TABLE student TO student_new ;
Команда такая же и легко следовать.SQL RENAME TABLE command

Есть ли методы для переименования большого количества таблиц в простой команде. Предположим, что все таблицы принадлежат одному имени DB.

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

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; 
... 

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

Update: MySQL используется.

+2

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

+0

Вы можете добавить в том, что вы хотите запустить эту команду из командной строки SQL. –

ответ

5

Принимая во внимание, что вы используете 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

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

+0

Привет, Я использую PHPMyAdmin. Я хочу использовать SQL-командное окно с SQL-скриптом. Не PHP scritp. Я узнал немного Perl. Но я знаю небольшую команду SQL. Благодарю. –

+1

Ну, только через phpMyAdmin я не думаю, что у вас будет много удачи. Если вы можете подключиться к базе данных с помощью Perl и выбрать все базы данных, вы можете их обновить, чтобы добавить _new в первую strpos() из _. –

1

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

+0

Извините за это. Используется MySQL. –

0

для базы данных MySQL «тест» должен работать:

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