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