2010-04-15 80 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