2010-04-15 79 views
2

我可以運行RENAME TABLE student TO student_new ;
該命令相同且易於遵循。SQL RENAME TABLE命令

是否有方法在簡單命令中重命名大量表格。假設所有的表都屬於同一個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; 
... 

(還有這麼多表需要重命名)

更新:MySQL的使用。

+2

您應該能夠生成腳本,但是這取決於您使用的數據庫... – 2010-04-15 13:08:06

+0

您可能要在事實添加您想從你的SQL命令行運行這個命令。 – 2010-04-15 14:29:37

回答

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命令。謝謝。 – 2010-04-15 13:11:15

+1

那麼,通過phpMyAdmin,我不認爲你會有很多運氣。如果您可以使用Perl連接到數據庫,並選擇所有數據庫,則可以更新它們以在_的第一個strpos()處添加_new。 – 2010-04-15 13:14:11

1

你沒有提到你正在使用的數據庫,這完全取決於數據庫(一些的DBMS甚至沒有允許重新命名錶)。然而,我不知道任何DBMS系統在我的腦海裏,允許在RENAME命令中使用通配符,所以是的,你可能不得不分別發送每個命令。

+0

對不起。使用MySQL。 – 2010-04-15 13:35:10

0

的MySQL數據庫的「測試」應該工作:

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