我的提供商已安装到我的网站Drupal CMS。现在我需要从旧网站复制我的所有数据。我的旧数据库中有没有前缀的表,但在新数据库中,所有表都有dp_[table_name]
前缀。
答案 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;