Chinaunix首页 | 论坛 | 博客
  • 博客访问: 489840
  • 博文数量: 99
  • 博客积分: 3621
  • 博客等级: 中校
  • 技术积分: 1089
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 16:29
文章存档

2012年(21)

2011年(28)

2010年(50)

分类: Mysql/postgreSQL

2012-05-04 16:24:05

MYSQL在修改库名称的常见办法:
1:MYISAM下,库名称只是一个文件夹名称,修改时停MYSQL服务,把库名称的文件夹改名,再重启服务即可
2:MYSQLDUMP备份出文件,再还原到新库里,删除旧库(INNODB,MYISAM通用)
3:INNODB下,库名称被记录到数据字典内,改文件夹名称无效,可以通过rename table a.t to b.t 来实现。
 
下面对方法3进行测试

点击(此处)折叠或打开

  1. [root@devdb7 mysql]# du -shc ng11
  2. 250G ng11
  3. 250G total
转换存储过程:

点击(此处)折叠或打开

  1. drop procedure if exists Clear_DB;
  2. delimiter //
  3. CREATE PROCEDURE Clear_DB(
  4.         ORIGIN_DB_NAME varchar(500),
  5.         TARGET_DB_NAME varchar(500)
  6.   )
  7. BEGIN
  8.   DECLARE done INT DEFAULT 0;
  9.   DECLARE a varchar(200);
  10.   DECLARE b varchar(200);
  11.   DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=ORIGIN_DB_NAME ;
  12.   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

  13.   OPEN cur1;
  14.   REPEAT
  15.     FETCH cur1 INTO a;
  16.     IF NOT done THEN
  17.        set b=concat('rename table ',ORIGIN_DB_NAME,'.',a,' to ',TARGET_DB_NAME,'.',a);
  18.        SET @E=b;
  19.        PREPARE stmt1 FROM @E;
  20.           EXECUTE stmt1; # 执行命令
  21.           DEALLOCATE PREPARE stmt1; #释放对象
  22.     END IF;
  23.   UNTIL done END REPEAT;
  24.   CLOSE cur1;
  25. END;
  26. //
  27. delimiter ;
执行SQL

点击(此处)折叠或打开

  1. mysql> call clear_db('ng11','test');
  2. Query OK, 0 rows affected, 1 warning (9 min 24.24 sec)
用方法3需要注意的几点:
1:表内的触发器不允许存在,如果有触发器的,先把触发器删除,rename之后再加上
2:如果目的库有表和原库有重名的表,会提示表存在,rename失败


 
阅读(911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~