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

Sky*_*Fox 24 mysql database prefix

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

Koe*_*en. 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';
Run Code Online (Sandbox Code Playgroud)

编辑:

优化查询只调用一次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.
Run Code Online (Sandbox Code Playgroud)


zer*_*kms 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";
Run Code Online (Sandbox Code Playgroud)

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

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


小智 15

PhpMyAdmin允许您现在执行此操作.在"数据库"级别,选择"结构"选项卡以查看所有表.点击"全部选中"(在表格列表下方).在'With selected'下拉列表中选择:'Replace table prefix'.


小智 6

Just modded this slightly to account for situations where the prefix is also in the table name.

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;
Run Code Online (Sandbox Code Playgroud)


Tom*_*vic 5

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

  • 直到数据库小于几千兆字节;-) (3认同)