MySQL RENAME TABLE语句如何工作/执行?

时间:2009-05-20 01:22:36

标签: php python mysql ruby migration

MySQL有一个RENAME TABLE statemnt,允许您更改表的名称。

手册提及

  

重命名操作以原子方式完成,这意味着没有其他会话可以   在重命名运行时访问任何表

本手册没有(据我所知)说明如何完成重命名。是否创建了表的完整副本,给定了新名称,然后删除旧表?或者MySQL在幕后做了一些魔术来快速重命名表?

换句话说,表的大小是否会影响RENAME表语句运行的时间。还有其他可能导致块重命名的事情会严重阻塞吗?

2 个答案:

答案 0 :(得分:5)

我认为MySQL只需要在存储过程中更改元数据和对表的旧名称的引用 - 表中的记录数应该是无关紧要的。

答案 1 :(得分:1)

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

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

=)