使用 MySQL RENAME TABLE 语句重命名表

在本文中,您将了解如何使用 MySQL RENAME TABLE 语句和 ALTER TABLE 语句重命名一个表。

有时候,您会由于一些原因修改一个现有的表的名称。比如:

  • 您在创建表的时候使用了错误的表名。
  • 您需要将表名更改为一个更有意义的名称。
  • 产品的需求发生变化,需要将表名更改以适应新的业务。
  • 您所在的团队使用了新的命名规则,您需要重命名那些不符合新规则的表。

MySQL 提供了 RENAME TABLE 语句用以重命名表。除此之外,您还可以使用 ALTER TABLE 语句重命名表。

MySQL 重命名表的注意事项

重命名表是一个简单的动作,但是它可能会带来一系列的问题。如果您没有同步修改那些用到此表的代码,则他们可能不能正常运行。

您需要同步修改的代码可能包括:

  1. 那些使用了此表的存储过程
  2. 那些使用了此表的视图
  3. 那些使用了此表的函数
  4. 那些使用了此表的触发器
  5. 那些使用了此表的外键约束 (在较旧的 MySQL 版本中)。
  6. 那些使用了此表的应用程序。

因此,当您打算修改一个表名的时候,您需要首先从整体上进行评估。然后,再决定是否进行重命名表。一旦您决定了要重命名一个表,您需要把需要同步修改的地方整理清楚。

MySQL 重命名表的语法

您可以按照如下的语法使用 RENAME TABLE 语句重命名一个表:

RENAME TABLE
    old_table_name TO new_table_name
    [, old_table_name2 TO new_table_name2];

您也可以按照如下语法使用 ALTER TABLE 语句重命名表:

ALTER TABLE old_table_name
RENAME TO new_table_name;

这里:

  • old_table_name 是需要重命名的表。
  • new_table_name 是新的表名。

RENAME TABLE 语句和 ALTER TABLE 语句也可以用来重命名视图。

RENAME TABLE 语句和 ALTER TABLE 语句也存在一些不同:

  • RENAME TABLE 语句更加简洁。
  • 您可以在一个 RENAME TABLE 语句中同时重命名多个表。
  • RENAME TABLE 语句不可以用来重命名临时表,ALTER TABLE 语句可以用来重命名临时表

MySQL 重命名表实例

这个实例演示了如何在 MySQL 中重命名一个表。

假设,我们有一个用户表 user。 因为您所在的团队制定了新的命名规则,所有的实体表需要以复数形式命名,因此您需要将 user 表重命名为 users

我们使用以下语句在 testdb 数据库中 创建一个 user 以实践我们的实例:

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int NOT NULL DEFAULT '20',
  `email` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

如果您没有 testdb 数据库,请先使用如下语句创建数据库并选择数据库:

CREATE DATABASE testdb;
use testdb;

创建表后,您可以使用 SHOW TABLES 语句查看表是否创建成功:

SHOW TABLES LIKE 'user%';
+--------------------------+
| Tables_in_testdb (user%) |
+--------------------------+
| user                     |
+--------------------------+

要将 user 表重命名为 users,请运行以下语句:

RENAME TABLE user TO users;

创建表后,您可以使用 SHOW TABLES 语句查看表:

SHOW TABLES LIKE 'user%';
+--------------------------+
| Tables_in_testdb (user%) |
+--------------------------+
| users                    |
+--------------------------+

现在, 我们看到 testdb 数据库中已经没有了 user 表,而只有 users 表。

当然,您也可以使用 ALTER TABLE 语句将 user 表重命名为 users,如下:

ALTER TABLE user RENAME TO users;

结论

MySQL 提供了 RENAME TABLEALTER TABLE 语句重命名表。

请记住,在重命名一个表的时候,此表中不能有未完成的事务,并且此表不能是锁定状态