如何在单个查询中更改所有表前缀

时间:2013-05-02 13:43:32

标签: mysql phpmyadmin prefix

我在mysql中非常业余。你能告诉我如何在单个查询中更改整个数据库的表前缀...我可以手动完成,但更改所有表前缀非常耗时。请帮帮我。就像isc_administrator_log到cus_administrator_log意味着isc_ to cus _

我找到了这两个解决方案,但不理解其中任何一个。

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

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';

3 个答案:

答案 0 :(得分:1)

两个语句都生成恰好是SQL语句的字符串,然后您可以在提示符处复制/粘贴以重命名表格。

只需用您需要的实际值替换以下两个字符串:

prefix_:您要添加的前缀

'test':包含要​​重命名的表的数据库的名称

两个语句几乎完全相同,唯一的区别是第一个语句中没有明确提到information_schema。因此,必须从information_schema数据库(问题USE information_schema之前)运行第一个语句。

答案 1 :(得分:0)

您可以对 MySQL 5.0.13 执行动态SQL查询


delimiter // 
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
    SET @s = CONCAT('SELECT 'RENAME TABLE ', 
             GROUP_CONCAT('', TABLE_SCHEMA, ''.'', TABLE_NAME,
             ' TO ', TABLE_SCHEMA, ''='.prefix_''', TABLE_NAME, '')) AS q
             FROM 
             information_schema.Tables WHERE TABLE_SCHEMA='test'';;'
    PREPARE stmt FROM @s;
    EXECUTE stmt;
END
//
delimiter ;

here

获得参考

答案 2 :(得分:0)

phpmyadmin:选择数据库; tab结构=>检查所有=> (使用选定列表)选择为表添加前缀。

(不是查询但有效)