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/
其他回答
最简单的方法是使用HeidiSQL软件。它是免费的,开源的。它可以在Windows和任何带有Wine的Linux上运行(在Linux、BSD、Solaris和Mac OS X上运行Windows应用程序)。
这是HeidiSQL的下载,转到 http://www.heidisql.com/download.php。
下载Wine,请登录http://www.winehq.org/。
要在HeidiSQL中重命名数据库,只需右键单击数据库名称并选择“Edit”。然后输入一个新名称并按“OK”。
就是这么简单。
TodoInTx的解决方案和user757945的改编解决方案都不适合我的MySQL 5.5.16,所以这里是我的改编版本:
DELIMITER //
DROP PROCEDURE IF EXISTS `rename_database`;
CREATE PROCEDURE `rename_database` (IN `old_name` VARCHAR(20), IN `new_name` VARCHAR(20))
BEGIN
DECLARE `current_table_name` VARCHAR(20);
DECLARE `done` INT DEFAULT 0;
DECLARE `table_name_cursor` CURSOR FOR SELECT `table_name` FROM `information_schema`.`tables` WHERE (`table_schema` = `old_name`);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET `done` = 1;
SET @sql_string = CONCAT('CREATE DATABASE IF NOT EXISTS `', `new_name` , '`;');
PREPARE `statement` FROM @sql_string;
EXECUTE `statement`;
DEALLOCATE PREPARE `statement`;
OPEN `table_name_cursor`;
REPEAT
FETCH `table_name_cursor` INTO `current_table_name`;
IF NOT `done` THEN
SET @sql_string = CONCAT('RENAME TABLE `', `old_name`, '`.`', `current_table_name`, '` TO `', `new_name`, '`.`', `current_table_name`, '`;');
PREPARE `statement` FROM @sql_string;
EXECUTE `statement`;
DEALLOCATE PREPARE `statement`;
END IF;
UNTIL `done` END REPEAT;
CLOSE `table_name_cursor`;
SET @sql_string = CONCAT('DROP DATABASE `', `old_name`, '`;');
PREPARE `statement` FROM @sql_string;
EXECUTE `statement`;
DEALLOCATE PREPARE `statement`;
END//
DELIMITER ;
希望它能帮助到像我这样处境的人!注意:@sql_string之后将在会话中逗留。不使用它,我就无法写出这个函数。
我认为这个解决方案更简单,是一些开发人员提出的。phpMyAdmin对此有一个操作。
从phpMyAdmin中选择要选择的数据库。在选项卡中有一个叫做Operations,转到rename部分。这是所有。
正如许多人建议的那样,它使用新名称创建一个新数据库,将旧数据库的所有表转储到新数据库中,并删除旧数据库。
更新2022-09-22:MySQL 8.0+增加了一个更简单的解决方案:
不知道从什么时候开始添加RENAME TO关键字,但肯定更简单。不过在尝试之前,我会先把桌子备份一下,尤其是如果你的桌子很大的话。无论如何,它可以实现如下:
ALTER TABLE `schema_name`.`table_name`
RENAME TO `schema_name`.`new_table_name` ;
为了便于阅读,我把它分成了两行,但也可以写成单行,如下:
ALTER TABLE `schema_name`.`table_name` RENAME TO `schema_name`.`new_table_name` ;
使用以下几个简单的命令:
mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql
或者使用@Pablo Marin-Garcia建议的以下方法来减少I/O:
mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase
步骤:
点击http://localhost/phpmyadmin/ 选择您的数据库 点击操作选项卡 将有一个选项卡作为“重命名数据库到”。添加新名称并勾选调整权限。 点击Go。