服务器A 上有一数据库 BMW
公司另有一套数据库 名字也叫 BMW
现在想把BMW 改名为BMW2 然后导出SQL 在服务器上执行?
谁能说下,数据库 用命令如何更名? 

解决方案 »

  1.   

    5。1以上
    RENAME DATABASE db_name TO new_db_name;
    or
    RENAME SCHEMA db_name TO new_db_name;
      

  2.   

    RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
     
    This statement was added in MySQL 5.1.7 but was found to be dangerous and was removed in MySQL 5.1.23. 记住了伐?
      

  3.   


    没有rename database的语法吧?确定吗
      

  4.   

    rename database db_name to new_db_name
    5.1版本以下版本的,最好先导出后再建立数据库,后再导入。
      

  5.   

    建议是先用 mysqldump 导出,然后修改其它中的 create database 语句为新的数据库名,然后再导入。如果你的数据库中没有特别的程序比如触发器,存储过程,则可以直接在操作系统上直接把数据所对应的文件目录改名为新的名字。
      

  6.   

    mysql> select @@version;
    +-----------+
    | @@version |
    +-----------+
    | 5.5.23    |
    +-----------+
    1 row in set (0.00 sec)mysql> rename database db1 to db2;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use n
    r 'database db1 to db2' at line 1
    mysql>rename database,此语法还不被支持。
    楼主的问题按引擎分为2种情况
    1:MYISAM,只需要把库名字的文件夹名称改了就行。
    2:INNODB,如果库里面有触发器,需要先删除触发器,库改名后再添加。需要对库里面每个表改名称,存从过程如下:CREATE DEFINER=`root`@`localhost` PROCEDURE `Switch_DB`( 
            ORIGIN_DB_NAME varchar(500),
            TARGET_DB_NAME varchar(500) 
      )
    BEGIN
      DECLARE done INT DEFAULT 0;  
      DECLARE a varchar(200);
      DECLARE b varchar(200);
      DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=ORIGIN_DB_NAME ;
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
      
      OPEN cur1;
      REPEAT
        FETCH cur1 INTO a;
        IF NOT done THEN 
           set b=concat('rename table ',ORIGIN_DB_NAME,'.',a,' to ',TARGET_DB_NAME,'.',a); 
            SET @E=b; 
           PREPARE stmt1 FROM @E; 
              EXECUTE stmt1; 
               DEALLOCATE PREPARE stmt1; 
         END IF;
      UNTIL done END REPEAT;
      CLOSE cur1;
      
    END;关键点在:rename table db1.tb to db2.tb.
    其实这好像不是“改名”了,而且“移表”了。
      

  7.   

    调用语法:call cluster.Switch_DB('ng_new','ng');
      

  8.   

    我这边是先mysqldump后,对create的数据库名字进行修改,再进行source的,挺安全的。