MySQL的RENAME TABLE语句是如何工作的?

4 投票
2 回答
2580 浏览
提问于 2025-04-15 11:42

MySQL有一个叫做RENAME TABLE的命令,可以让你更改表的名字。

手册中提到:

重命名操作是原子性的,这意味着在重命名进行时,其他会话无法访问任何表。

我记得手册没有说明这个重命名是怎么实现的。是先创建一个整个表的副本,给它一个新名字,然后再删除旧表吗?还是说MySQL在后台做了一些魔法,快速地重命名表?

换句话说,表的大小会影响RENAME TABLE命令执行的时间吗?还有其他因素会导致重命名过程显著延迟吗?

2 个回答

1

除了修改一些元数据,它还会重命名相关的 .FRM 文件。虽然他们可以说这是一个“原子”操作,但这实际上是 mysql_rename_tables 函数代码中的一个注释...

/* Lets hope this doesn't fail as the result will be messy */

=)

6

我认为MySQL只需要修改一些关于表的旧名字的元数据和在存储过程中的引用就可以了,表里记录的数量应该没什么关系。

撰写回答