27

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

4

7 回答 7

32

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.
于 2012-04-03T11:11:02.510 回答
25

PhpMyAdmin 允许您现在执行此操作。在“数据库”级别选择结构选项卡以查看所有表。单击“检查全部”(在表格列表下方)。在“选择”下拉列表中选择:“替换表前缀”。

于 2016-01-06T07:09:34.357 回答
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”是预期的数据库名称

在此之后,您可以长查询,如果您执行它将添加前缀;-)

于 2010-03-17T21:44:53.707 回答
5

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

于 2010-03-17T22:12:57.033 回答
3

只是稍微修改了一下,以考虑前缀也在表名中的情况。

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;
于 2020-09-30T00:23:13.533 回答
2

如果有人想知道如何做到这一点(因为它对我的其他选项不起作用)你可以运行它(当然,为你的值更改前三个变量):

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;

然后会提示您进行一系列查询,以便更改数据库中的所有表。你只需要复制它,运行它,瞧!

于 2019-07-12T06:38:14.640 回答
0
SET @database   = "Database-Name-Here";
SET @old_prefix = "wp_";
SET @new_prefix = "ab_";
   SELECT
    CONCAT(
        "RENAME TABLE ",
        @database,
        ".",
        TABLE_NAME,
        " TO ",
        @database,
        ".",
        CONCAT(@new_prefix, TRIM(LEADING @old_prefix FROM TABLE_NAME)),
        ';'
    ) AS "SQL" FROM information_schema.TABLES WHERE TABLE_SCHEMA = @database;

“Database-Name-Here”替换为您的数据库名称,将“wp_”替换为旧前缀,将“ab_”替换为新前缀。上面的代码会产生对 MySQL 数据库的查询,同样,上面代码创建的查询用单引号括起来,必须替换。但是,如果您正在处理WordPress,则需要执行更多步骤,否则您的网站将被破坏。在上述代码创建的查询之后,必须执行以下查询。

update NEWPREFIX_usermeta set meta_key = 'NEWPREFIX_capabilities' where meta_key = 'OLDPREFIX_capabilities';
update NEWPREFIX_usermeta set meta_key = 'NEWPREFIX_user_level' where meta_key = 'OLDPREFIX_user_level';
update NEWPREFIX_usermeta set meta_key = 'NEWPREFIX_autosave_draft_ids' where meta_key = 'OLDPREFIX_autosave_draft_ids';
update NEWPREFIX_options set option_name = 'NEWPREFIX_user_roles' where option_name = 'OLDPREFIX_user_roles'

“NEWPREFIX”替换为新前缀,将“OLDPREFIX 替换为旧前缀。

于 2021-10-06T15:01:12.973 回答