3

要重命名 SQL 中的任何表,我们使用以下命令:

RENAME OldTableName TO NewTableName

这在内部如何运作?

我的假设是它可能首先使用 NewTableName 创建一个表AS SELECT,然后使用 删除旧表DROP,就像我们在 C 中处理文件时重命名文件时所做的那样。我是对的,还是它的工作方式不同?

4

2 回答 2

5

它的工作方式不同。数据不会被复制。表的名称只是在元数据表中更新——以及对触发器等事物的引用。

于 2013-09-19T13:43:25.227 回答
2

您可以从这里获得一些帮助:-

重命名操作是原子完成的,这意味着在重命名运行时没有其他会话可以访问任何表。例如,如果您有一个现有的表 old_table,您可以创建另一个具有相同结构但为空的表 new_table,然后将现有表替换为空表,如下所示(假设 backup_table 不存在)。…………………………………………………………………………

执行 RENAME 时,不能有任何锁定的表或活动事务。您还必须拥有对原始表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限。

如果 MySQL 在多表重命名中遇到任何错误,它会对所有重命名的表进行反向重命名,以将所有内容返回到其原始状态。

于 2013-09-19T13:44:55.000 回答