如何使用MySQL更改数据库名称?

29

如何更改数据库的名称?

我尝试使用重命名数据库命令,但文件中提到它是危险的。那么我该怎么做才能更改我的数据库名称呢?

比如说,如果我想把我的数据库重命名为这个。

database1 -> database2?

1
请参考以下链接:https://dev59.com/bWct5IYBdhLWcg3wULvo - nom_nutella
啊,好的,那就没有相关的代码了。所以我只需要将我的数据库导出并重命名即可。谢谢。 - Jerielle
3
是的,那是一个更好的想法,另外请检查https://dev59.com/sXVD5IYBdhLWcg3wKYP-。 - MusicLovingIndianGirl
这个问题不应该被关闭,它涉及到一个没有使用mysql的答案。 - Grumpy
这个问题不应该被关闭,它指的是一个没有使用MySQL的答案。 - undefined
13个回答

45

请按照以下步骤进行:

shell> mysqldump -hlocalhost -uroot -p  database1  > dump.sql

mysql> CREATE DATABASE database2;

shell> mysql -hlocalhost -uroot -p database2 < dump.sql

如果你想删除database1,否则就让它保留。

mysql> DROP DATABASE database1;
注意:shell>代表命令提示符,mysql>代表mysql提示符。

4
感谢您提供了详细的解决方案,而不是说为什么无法完成。 - Haydentech
1
请注意,需要将特定用户权限重新添加到新数据库中。 - ngm
不要忘记使用“以管理员身份运行”打开cmd。否则,您将会得到访问被拒绝的错误提示。 - Soon Santos
这应该是被接受的答案。它只缺少了一句话,即“你不能真正地重命名MySQL数据库,你必须复制它并删除原始数据库”,但其他答案中已经充分解释过了。 - Francesco Marchetti-Stasi

20

我认为这是不可能的。

你可以使用 mysqldump 命令来导出数据,然后创建一个新的名称为你想要的数据库并将数据导入到新的数据库中。


16

遗憾的是,MySQL没有明确支持该操作(除了倒出和重新加载整个数据库)。

http://dev.mysql.com/doc/refman/5.1/en/rename-database.html

13.1.32. RENAME DATABASE 语法

RENAME {DATABASE | SCHEMA} db_name TO new_db_name;

此语句在 MySQL 5.1.7 中添加,但被发现存在潜在危险,并在 MySQL 5.1.23 中被移除... 使用此语句可能导致丢失数据库内容,这就是为什么它被移除的原因。不要在早期版本中使用 RENAME DATABASE 语句。


谢谢你的提示。我正要重命名数据库,然后看到了你的答案。你能建议任何解决方法吗?我刚刚导入了4GB的数据库,想要重命名它。不想重新导入,因为这需要太多时间。 - Suraj

6
只要两个数据库位于同一个文件系统上,您就可以使用 RENAME TABLE 命令将表从一个数据库移动到另一个数据库。
-- ensure the char set and collate match the existing database.
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';


CREATE DATABASE `database2` DEFAULT CHARACTER SET = `utf8` DEFAULT COLLATE = `utf8_general_ci`;
RENAME TABLE `database1`.`table1` TO `database2`.`table1`;
RENAME TABLE `database1`.`table2` TO `database2`.`table2`;
RENAME TABLE `database1`.`table3` TO `database2`.`table3`;

http://dev.mysql.com/doc/refman/5.7/en/rename-table.html


这是重命名表,而不是重命名数据库。 - Douglas Gaskell
2
真实的情况却是一样的。您的所有数据最终都会出现在一个新的数据库中,您不需要重新加载它。请注意,新旧数据库需要在相同的逻辑磁盘上。 - txyoji
1
我喜欢这个想法。确实,它没有回答 OP 的原始问题,但它提供了一种机制,允许 OP 做他们想做的事情。假设数据库有成千上万行数据分布在十几个表中,使用这种方式可能会更快。对于我来说,我的数据库只有三个表,其中一个表有 200 万行记录,但也证明了这种方法的有效性。 - nurdglaw

5
你可以使用MySQL接口更改数据库名称。
前往http://www.hostname.com/phpmyadmin
进入你想要重命名的数据库。接下来,前往操作选项卡。在那里,你会找到用于重命名数据库的输入字段。

3
InnoDB支持RENAME TABLE语句将表从一个数据库移动到另一个数据库。为了在编程时使用它并重命名具有大量表的数据库,我编写了几个过程来完成此工作。您可以在此处查看 - Gist的SQL脚本
要使用它,只需调用 renameDatabase 过程即可。
CALL renameDatabase('old_name', 'new_name');

经过MariaDB测试,理想情况下适用于所有使用InnoDB事务引擎的关系型数据库管理系统。


为了在某些模式和表名中保持安全,需要在模式和表名周围加上反引号(`)。我在Gist中添加了一条带有更正的评论。 - E-Riz

1
我同意上面的答案和建议,但是有一种方法可以使用phpMyAdmin更改数据库名称。
重命名数据库 从cPanel中,点击phpMyAdmin。(应该在新标签页中打开。) 在左侧栏中点击您想要重命名的数据库。 点击操作选项卡。 在“将数据库重命名为:”处输入新的数据库名称。 点击Go按钮。 当它询问您是否要创建新数据库并删除旧数据库时,请单击OK以继续。(这是确认新名称拼写正确的好时机。) 操作完成后,当被问到是否要重新加载数据库时,请单击OK。
这里是视频教程:

http://support.hostgator.com/articles/specialized-help/technical/phpmyadmin/how-to-rename-a-database-in-phpmyadmin


0

另一种重命名数据库或对数据库进行图像捕捉的方法是使用数据库选项卡中的逆向工程选项。它将为数据库创建一个ER图表。在那里对模式进行重命名。

之后,转到文件菜单,选择导出和正向工程数据库。

然后您可以导入数据库。


MySQL Workbench是他所提及工具的名称。 - Gwi7d31

0

Sequel Ace 数据库客户端具有重命名数据库功能。选择要编辑的数据库,单击菜单中的 Database,然后从下拉菜单中单击 Rename Database。重新命名数据库并单击 rename。完成!


-1
您可以使用以下命令。
alter database Testing modify name=LearningSQL;

Old Database Name = Testing,
New Database Name = LearningSQL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接