如何更改MySQL数据库中所有表的前缀?

时间:2010-03-17 21:39:08

标签: mysql database prefix

我的提供商已安装到我的网站Drupal CMS。现在我需要从旧网站复制我的所有数据。我的旧数据库中有没有前缀的表,但在新数据库中,所有表都有dp_[table_name]前缀。

6 个答案:

答案 0 :(得分:28)

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.

答案 1 :(得分: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";

其中“test”是预期的数据库名称

在此之后你可以长时间查询,如果你执行它会添加前缀; - )

答案 2 :(得分:13)

PhpMyAdmin允许您立即执行此操作。在"数据库" level选择Structure选项卡以查看所有表。点击“全部检查”。 (在表格下方)。在' With selected'下拉选择:'替换表格前缀'。

答案 3 :(得分:4)

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

答案 4 :(得分:0)

如果有人在那里想知道如何执行此操作(因为它对我来说其他选项无效),则可以运行此操作(当然,更改值的前三个变量):

SET @database   = "database_name"; 
SET @old_prefix = "old_prefix_"; 
SET @new_prefix = "new_prefix_";
   SELECT
    concat(
        "RENAME TABLE ",
        TABLE_NAME,
        " TO ",
        replace(TABLE_NAME, @old_prefix, @new_prefix),
        ';'
    ) AS "SQL" FROM information_schema.TABLES WHERE TABLE_SCHEMA = @database;

然后,系统将提示您一些查询,以更改数据库中的所有表。您只需要复制,运行并瞧瞧!

答案 5 :(得分:0)

只需稍加修改,以解决表名中也包含前缀的情况。

SET @database   = "database_name"; 
SET @old_prefix = "old_prefix_"; 
SET @new_prefix = "new_prefix_";
   SELECT
    CONCAT(
        "RENAME TABLE ",
        TABLE_NAME,
        " TO ",
        CONCAT(@new_prefix, TRIM(LEADING @old_prefix FROM TABLE_NAME)),
        ';'
    ) AS "SQL" FROM information_schema.TABLES WHERE TABLE_SCHEMA = @database;