MySQL 更改库名?试试 RENAME

本文介绍MySQL中重命名数据库的方法,由于MySQL不直接支持此操作,需要通过移动表的方式来实现。文章详细展示了使用RENAMETABLE语句的具体步骤,并提供了注意事项及替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于个人能力有限,文中可能存在错误,欢迎批评指正。

1.说明

实际上,MySQL 并不直接支持重命名数据库的操作,因为数据库本身在 MySQL 中只是一个命名空间,它包含了多个表和其他数据库对象。要 “重命名” 数据库,实际上需要将数据库中的所有表逐一移动到新的数据库中。

1)需评估业务,正常情况下,业务也要停机配合;
2)需考虑相关信息的同步,如 CMDB 资产信息、平台元数据等。

2.命令示例

以下是如何使用 RENAME TABLE 语句将表从一个数据库移动到另一个数据库的示例:

RENAME TABLE old_database_name.table1 TO new_database_name.table1,
             old_database_name.table2 TO new_database_name.table2,
             ...
             old_database_name.tableN TO new_database_name.tableN;

注:ALTER TABLE … RENAME 语句可以在同一数据库内部重命名表,但它不能将表移动到另一个数据库。要做到这一点,通常需要使用 RENAME TABLE 语句,该语句允许您将表从一个数据库移动到另一个数据库。

3.测试

示例:将库名 test01 更改为 test02

# 查看原库 test01 中表信息
mysql> use test01;
Database changed
mysql> show tables;
+------------------+
| Tables_in_test01 |
+------------------+
| t1               |
+------------------+
1 row in set (0.00 sec)

# 创建新库 test02
mysql> create database test02;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test01             |
| test02             |
+--------------------+
6 rows in set (0.00 sec)

# 拼接 rename sql
mysql> select concat("rename table",' ',table_schema,'.',table_name,' ',"to",' ',"test02",'.',table_name,';') from information_schema.tables where table_schema='test01';
+-------------------------------------------------------------------------------------------------+
| concat("rename table",' ',table_schema,'.',table_name,' ',"to",' ',"test02",'.',table_name,';') |
+-------------------------------------------------------------------------------------------------+
| rename table test01.t1 to test02.t1;                                                            |
+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

# 执行 rename
mysql> rename table test01.t1 to test02.t1;
Query OK, 0 rows affected (0.01 sec)
	
# 查看结果
mysql> use test02;
Database changed
mysql> show tables;
+------------------+
| Tables_in_test02 |
+------------------+
| t1               |
+------------------+
1 row in set (0.00 sec)

4.注意事项

1)如果目标数据库不存在,RENAME TABLE 语句将失败;
2)如果目标数据库中已经存在同名的表,该语句也会失败,除非使用 FORCE 选项(但这通常不推荐,因为它会覆盖现有的表);
3)如果表有外键约束,则需要先删除这些约束,然后再重命名表;
4)重命名操作可能会因为各种原因(如权限问题、存储引擎限制、文件系统问题等)而失败;
5)如果目标数据库位于不同的文件系统中,重命名操作的成功与否取决于底层操作系统的文件移动操作。

5.更多方式

1)mysqldump 导出,再导入;
2)使用 replicate-rewrite-db 实现复制映射 + Replicate_Wild_Do_Table 实现复制过滤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值