2

我在 mysql 方面非常业余。请告诉我如何在单个查询中更改整个数据库的表前缀...我可以手动完成,但是更改所有表前缀非常耗时。请帮帮我。像 isc_administrator_log 到 cus_administrator_log 意味着 isc_ 到 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';
4

3 回答 3

1

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

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

prefix_:要添加的前缀

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

两个陈述几乎相同,唯一的区别是information_schema第一个陈述中没有明确提及。因此,第一条语句必须从数据库运行(事先information_schema发出)。USE information_schema

于 2013-05-02T13:59:25.367 回答
1

phpmyadmin:选择数据库;选项卡结构 => 检查所有 =>(带有选定列表)选择向表添加前缀。

(不是查询,但它有效)

于 2017-05-12T19:42:38.553 回答
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 ;

这里获得参考

于 2013-05-02T13:58:37.613 回答