要重命名 SQL 中的任何表,我们使用以下命令:
RENAME OldTableName TO NewTableName
这在内部如何运作?
我的假设是它可能首先使用 NewTableName 创建一个表AS SELECT
,然后使用 删除旧表DROP
,就像我们在 C 中处理文件时重命名文件时所做的那样。我是对的,还是它的工作方式不同?
它的工作方式不同。数据不会被复制。表的名称只是在元数据表中更新——以及对触发器等事物的引用。
您可以从这里获得一些帮助:-
重命名操作是原子完成的,这意味着在重命名运行时没有其他会话可以访问任何表。例如,如果您有一个现有的表 old_table,您可以创建另一个具有相同结构但为空的表 new_table,然后将现有表替换为空表,如下所示(假设 backup_table 不存在)。…………………………………………………………………………
执行 RENAME 时,不能有任何锁定的表或活动事务。您还必须拥有对原始表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限。
如果 MySQL 在多表重命名中遇到任何错误,它会对所有重命名的表进行反向重命名,以将所有内容返回到其原始状态。