11.6 重命名表

在本教程中,您将学习如何使用MySQL RENAME TABLE语句和ALTER TABLE语句重命名表。

MySQL RENAME TABLE语句简介

由于业务需求变化,我们需要将当前表重新命名为新表,以更好地反映或表示新情况。 MySQL提供了一个非常有用的语句来更改一个或多个表的名称。

要更改一个或多个表,我们使用RENAME TABLE语句如下:

RENAME TABLE old_table_name TO new_table_name;

旧表(old_table_name)必须存在,新表(new_table_name)必须不存在。 如果新表new_table_name存在,则该语句将失败。

除了表之外,我们还可以使用RENAME TABLE语句来重命名视图

在执行RENAME TABLE语句之前,必须确保没有活动事务或锁定表

请注意,不能使用RENAME TABLE语句来重命名临时表,但可以使用ALTER TABLE语句重命名临时表。

在安全性方面,我们授予旧表的任何权限必须手动迁移到新表。

在重命名表之前,应该彻底地评估影响。 例如,应该调查哪些应用程序正在使用该表。 如果表的名称更改,那么引用表名的应用程序代码也需要更改。 此外,您必须手动调整引用该表的其他数据库对象,如视图存储过程触发器外键约束等。 我们将在下面的例子中更详细地讨论。

MySQL RENAME TABLE示例

首先,我们创建一个名为hrdb的新数据库,它由两个表组成:employeesdepartments

img

创建数据库 -

创建表 -

其次,将样本数据插入到 employeesdepartments 表中:

第三,查询在 employeesdepartments 表中的数据:

重命名视图引用的表

如果重命名一个被视图引用的表,在重命名表后,视图就无效了,并且必须手动调整视图。

例如,我们基于employeesdepartments表创建一个名为v_employee_info的视图,如下所示:

视图使用内连接子句来连接employeesdepartments表。

以下SELECT语句返回v_employee_info视图中的所有数据。

现在,将v_employee_info视图中的employees表重命名为people,并查询视图的数据。

MySQL返回以下错误消息:

我们可以使用CHECK TABLE语句来检查v_employee_info视图的状态如下:

需要手动更改v_employee_info视图,以便它引用people表而不是employees表。

重命名由存储过程引用的表

如果要重命名由存储过程引用的表,则必须像对视图一样进行手动调整。

首先,将people表重命名为employees表。

然后,创建一个名为get_employee的新存储过程,该过程引用employees表。

接下来,执行get_employee存储过程从employees表来获取id1的员工的数据,如下所示:

执行上面查询语句,得到以下结果 -

之后,我们再次将employees表重新命名为people表。

最后,调用get_employee存储过程来获取id2的员工信息:

MySQL返回以下错误消息:

要解决这个问题,我们必须手动将存储过程中的employees表更改为people表。

重命名引用外键的表

departments表使用department_id列链接到employees表。 employees表中的department_id列是引用departments表的department_id列作为外键

如果重命名departments表,那么指向departments表的所有外键都不会被自动更新。 在这种情况下,我们必须手动删除并重新创建外键。

我们删除ID1的部门,由于外键约束,people表中的所有行也应删除。 但是,我们将department表重命名为depts表,而不会手动更新外键,MySQL会返回错误,如下所示:

执行上面语句,得到以下以下错误提示 -

重命名多个表

也可以使用RENAME TABLE语句来一次重命名多个表。 见下列声明:

以下语句将 peopledepts 重命名为 employeesdepartments 表:

注意RENAME TABLE语句不是原子的。所以如果在任何时候发生错误,MySQL会将所有重新命名的表都回滚到旧名称。

使用ALTER TABLE语句重命名表

我们可以使用ALTER TABLE语句重命名一个表,如下所示:

RENAME TABLE语句不能用于重命名临时表,这时就可以使用ALTER TABLE语句来重命名一个临时表。

重命名临时表示例

首先,我们创建一个临时表,其中包含来自employees表的last_name列的所有唯一的姓氏:

第二步,使用RENAME TABLE重命名姓氏表:

MySQL返回以下错误消息:

第三,使用ALTER TABLE语句来重命名姓氏表。

第四,从unique_lastnames临时表查询数据:

在本教程中,我们向您展示了如何使用MySQL RENAME TABLEALTER TABLE语句重命名表。

Last updated

Was this helpful?