MySQL手册中有介绍。
通常我只是转储数据库并用一个新名称重新导入它。这不是非常大的数据库的一个选项。重命名数据库| SCHEMA} db_name TO new_db_name做坏事,只存在于少数版本中,总的来说是个坏主意。
这需要与InnoDB一起工作,InnoDB存储的东西与MyISAM非常不同。
MySQL手册中有介绍。
通常我只是转储数据库并用一个新名称重新导入它。这不是非常大的数据库的一个选项。重命名数据库| SCHEMA} db_name TO new_db_name做坏事,只存在于少数版本中,总的来说是个坏主意。
这需要与InnoDB一起工作,InnoDB存储的东西与MyISAM非常不同。
当前回答
对于那些Mac用户,Sequel Pro在数据库菜单中有一个重命名数据库选项。 http://www.sequelpro.com/
其他回答
当您在PHPMyAdmin中重命名数据库时,它会创建一个转储,然后删除并使用新名称重新创建数据库。
你们这些家伙会为此开枪打死我的,很可能这不会每次都管用,当然,这违反了所有的逻辑……但我刚试过的是…停止MySQL引擎,以root身份登录,并在文件系统级别上简单地重命名数据库....
我在OSX上,只改变了情况,从bedbf到bedbf。令我惊讶的是,它竟然起作用了……
我不建议在生产DB上使用它。我只是做了个实验……
祝你好运! -)
如果你正在使用phpMyAdmin,一旦你选择了你想要重命名的数据库,你可以去“操作”选项卡。然后转到最后一节“将数据库复制到”(或类似的内容),给出一个名称,并选择下面的选项。在这种情况下,我猜你必须选择“结构和数据”和“在复制之前创建数据库”复选框,最后,按下该部分中的“go”按钮。
顺便说一下,我在西班牙语中使用phpMyAdmin,所以我不确定英语部分的名称是什么。
下面是一行Bash代码片段,用于将所有表从一个模式移动到另一个模式:
history -d $((HISTCMD-1)) && mysql -udb_user -p'db_password' -Dold_schema -ABNnqre'SHOW TABLES;' | sed -e's/.*/RENAME TABLE old_schema.`&` TO new_schema.`&`;/' | mysql -udb_user -p'db_password' -Dnew_schema
开始时的history命令只是确保包含密码的MySQL命令不会保存到shell历史记录中。
确保db_user对旧模式具有读/写/删除权限,对新模式具有读/写/创建权限。
似乎没有人提到这一点,但这里有另一种方式:
create database NewDatabaseName like OldDatabaseName;
然后对每个表执行:
create NewDatabaseName.tablename like OldDatabaseName.tablename;
insert into NewDataBaseName.tablename select * from OldDatabaseName.tablename;
然后,如果你想,
drop database OldDatabaseName;
这种方法的优点是可以在几乎为零的网络流量的情况下在服务器上完成整个传输,因此它比转储/恢复快得多。
如果你有存储过程/视图等,你可能也想要传输它们。