2010-03-17 26 views

回答

26

zerkms解决方案没有为我工作。我必须指定information_schema数据库才能查询Tables表。

SELECT 
    CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q 
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='test'; 

编辑:

优化查询到的来电RENAME TABLE一次。我走进的一个事实是,连接的输出被截断了341个字符。这可以解决(如果允许您的服务器),由MySQL变量group_concat_max_len设定为更高的值:

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters. 
+0

确实,这对我来说很有用,因为我使用Joomla在本地主机XAMPP上工作,并且我想更改为自动Joomla前缀。我按照你的步骤 - 我必须像你一样指定'information_schema'.'Tables'并设置SET group_concat_max_len = 10240;在我的情况下,因为有很多表。 +1 – MJoraid 2015-02-01 08:59:29

+1

还有一点,您可以使用相同的命令跨数据库移动表(比如backup_db),如下所示:'SELECT CONCAT('RENAME TABLE',TABLE_NAME,'TO backup_db。',TABLE_NAME,';')FROM INFORMATION_SCHEMA。 TABLES WHERE table_schema ='testbot';' – sactiw 2016-06-10 11:32:18

+0

伟大的关于'group_concat_max_len'变量的编辑!我还没有得到完整的句子,工作很好! – AlexGH 2018-02-26 16:38:28

21

编写一个将为每个表运行RENAME TABLE的脚本。

SELECT 
    GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ') 
FROM 
    `TABLES` WHERE `TABLE_SCHEMA` = "test"; 

其中“测试”后,这个预期的数据库名

你能长时间查询,如果你执行它;-)

3

你可以简单地转储数据库,打开转储,将增加前缀使用文本编辑器,将所有出现的“CREATE TABLE”替换为“CREATE TABLE dp_”并恢复数据库。这需要几分钟的时间。

+2

直到数据库小于几千兆字节;-) – zerkms 2010-03-17 22:30:27

+0

我是游戏。 :)对于大于GB的数据库,使用查询工具(例如SQL Workbench),选择表列表中的所有表格,将内容复制到电子表格的A列(在我的情况下为Calc),并将以下内容公式在列B:=“重命名表”A1&“to dp_”&A1 & ";“将公式从单元格B1粘贴到每个其他B列单元格,重命名脚本出现在列B! – 2010-03-17 23:05:40

+0

正如我在我的答案中所述 - 重命名的一个恰当的方法是使用RENAME TABLE(+ information_shema来检索表名) – zerkms 2010-03-18 01:39:22

10

phpMyAdmin的允许你现在做到这一点。在“数据库”级别,选择“结构”选项卡以查看所有表格。点击“全选”(位于表格下方)。在'With selected'下拉列表中选择'Replace table prefix'。

相关问题