RENAME TABLE
tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...
RENAME TABLE
重命名一个或多个表。您必须拥有原始表的权限和新
ALTER
表
的权限。
DROP
CREATE
INSERT
例如,要重命名名为 的表old_table
,请new_table
使用以下语句:
RENAME TABLE old_table TO new_table;
该语句等效于以下
ALTER TABLE
语句:
ALTER TABLE old_table RENAME new_table;
RENAME TABLE
与 不同ALTER
TABLE
,可以在一条语句中重命名多个表:
RENAME TABLE old_table1 TO new_table1,
old_table2 TO new_table2,
old_table3 TO new_table3;
重命名操作从左到右执行。因此,要交换两个表名,请执行以下操作(假设具有中间名称的表tmp_table
尚不存在):
RENAME TABLE old_table TO tmp_table,
new_table TO old_table,
tmp_table TO new_table;
表上的元数据锁是按名称顺序获取的,在某些情况下,当多个事务并发执行时,这可能会对操作结果产生影响。请参阅 第 8.11.4 节,“元数据锁定”。
要执行RENAME TABLE
,必须没有活动事务或用 锁定的表LOCK
TABLES
。在满足事务表锁定条件的情况下,重命名操作以原子方式完成;在重命名过程中,没有其他会话可以访问任何表。
如果在 a 期间发生任何错误RENAME TABLE
,则该语句将失败并且不进行任何更改。
您可以使用RENAME TABLE
将表从一个数据库移动到另一个数据库:
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
使用此方法将所有表从一个数据库移动到另一个数据库实际上重命名了数据库(MySQL 没有单个语句的操作),除了原始数据库继续存在,尽管没有表。
像RENAME TABLE
,ALTER TABLE ...
RENAME
也可用于将表移动到不同的数据库。无论使用何种语句,如果重命名操作会将表移动到位于不同文件系统上的数据库,则结果的成功与否取决于平台,并且取决于用于移动表文件的底层操作系统调用。
如果表有触发器,尝试将表重命名为不同的数据库会失败,并出现Trigger in wrong schema
( ER_TRG_IN_WRONG_SCHEMA
) 错误。
重命名TEMPORARY
表,RENAME
TABLE
不起作用。改用ALTER
TABLE
。
RENAME TABLE
适用于视图,除了不能将视图重命名为不同的数据库。
专门为重命名的表或视图授予的任何权限都不会迁移到新名称。它们必须手动更改。
RENAME TABLE
更改内部生成的外键约束名称和以字符串“ tbl_name
TO
new_tbl_name
tbl_name
_ibfk_ ”开头的用户定义的外键约束名称
以反映新的表名称。将以字符串“ _ibfk_ ”InnoDB
开头的外键约束名称解释
为内部生成的名称。
tbl_name
指向重命名表的外键约束名称会自动更新,除非存在冲突,在这种情况下语句会因错误而失败。如果重命名的约束名称已经存在,则会发生冲突。在这种情况下,您必须删除并重新创建外键才能使它们正常运行。