伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

MySQL的SQL语句 - 数据定义语句(18)- RENAME TABLE 语句

来源:本站原创 浏览:107次 时间:2022-09-15
RENAME TABLE 语句

 




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;
 
与 ALTER TABLE 不同,RENAME 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;
 
表上的元数据锁是按名称顺序获得的,在某些情况下,当多个事务并发执行时,这会影响操作的结果。 从 MySQL 8.0.13 开始,可以重命名使用 LOCK TABLES 语句锁定的表,前提是这些表是用 WRITE 锁锁定的,或者是在之前的多表重命名操作中重命名 WRITE 锁表的结果。例如,允许这样做: 



LOCK TABLE old_table1 WRITE;RENAME TABLE old_table1 TO new_table1,             new_table1 TO new_table2;
 
这是不允许的: 



LOCK TABLE old_table1 READ;RENAME TABLE old_table1 TO new_table1,             new_table1 TO new_table2;
 
在 MySQL 8.0.13 之前,要执行 RENAME TABLE 语句,必须没有用 LOCK TABLES 语句锁定的表。 在满足事务表锁定条件后,重命名操作将自动完成;在重命名过程中,其他会话不能访问这些表。 如果在 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)。 可以将未加密的表移动到支持加密的数据库中,反之亦然。但是,如果启用了 table_encryption_privilege_check 变量,如果表加密设置与默认的数据库加密不同,则需要 TABLE_ENCRYPTION_ADMIN 权限。 要重命名临时表,RENAME TABLE 命令无效。请使用 ALTER TABLE 代替。 RENAME TABLE 命令适用于视图,但视图不能重命名到另一个数据库。 专门为重命名的表或视图授予的任何权限都不会迁移到新名称,必须手动更改。 RENAME TABLE tbl_name TO new_tbl_name 更改以字符串“tbl_name_ibfk_” 开头的内部生成的外键约束名称和用户定义的外键约束名称,以反映出新的表名。InnoDB 将以字符串 “tbl_name_ibfk_” 开头的外键约束名称识别为内部生成的名称。 指向重命名表的外键约束名称将自动更新,除非存在冲突,在这种情况下,语句失败并出现错误。如果重命名的约束名称已经存在,则会发生冲突。在这种情况下,必须删除并重新创建外键,以便它们正常工作。 RENAME TABLE tbl_name TO new_tbl_name 语句更改以字符串“tbl_name_chk_” 开头的内部生成和用户定义的 CHECK 约束名称,以反映新的表名。MySQL 将以字符串 “tbl_name_chk_” 开头的 CHECK 约束名称识别为内部生成的名称。例子: 


mysql> SHOW CREATE TABLE t1\G*************************** 1. row ***************************       Table: t1Create Table: CREATE TABLE `t1` (  `i1` int(11) DEFAULT NULL,  `i2` int(11) DEFAULT NULL,  CONSTRAINT `t1_chk_1` CHECK ((`i1` > 0)),  CONSTRAINT `t1_chk_2` CHECK ((`i2` < 0))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.02 sec)
mysql> RENAME TABLE t1 TO t3;Query OK, 0 rows affected (0.03 sec)
mysql> SHOW CREATE TABLE t3\G*************************** 1. row ***************************       Table: t3Create Table: CREATE TABLE `t3` (  `i1` int(11) DEFAULT NULL,  `i2` int(11) DEFAULT NULL,  CONSTRAINT `t3_chk_1` CHECK ((`i1` > 0)),  CONSTRAINT `t3_chk_2` CHECK ((`i2` < 0))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.01 sec)


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net