最直接、标准且安全的MySQL重命名表方式是RENAME TABLE语句,支持单表及多表原子性重命名,需ALTER/DROP和CREATE权限,不跨库,外键与视图需手动更新。

MySQL 中重命名数据表,最直接、标准且安全的方式是使用 RENAME TABLE 语句。它支持单表重命名,也支持多表原子性重命名(即同时改多个表名,要么全成功,要么全失败)。
基本语法:重命名单个表
格式简洁明确:
RENAME TABLE old_table_name TO new_table_name;例如,把 user_info 改成 users:
注意:执行前请确保目标表名 users 在当前数据库中不存在,否则会报错。
一次重命名多个表(原子操作)
适用于需要批量调整表名、或交换两个表用途的场景(比如上线新表结构前先切换别名):
RENAME TABLE table1 TO table2, table3 TO table4;例如,将旧日志表与新表“对调”名称:
RENAME TABLE logs_old TO logs_bak, logs_new TO logs_old;这个操作是原子性的——中途出错则全部回滚,不会出现只改了一半的情况。
注意事项和常见问题
-
权限要求:用户需对原表有
ALTER和DROP权限,对新表名所在数据库有CREATE权限。 -
不能跨库重命名:
RENAME TABLE db1.t1 TO db2.t2是允许的,但要求两个库在同一实例;若目标库不存在,会报错。严格来说,这是“移动+重命名”,不是纯重命名。 - 外键约束会失效:如果原表被其他表的外键引用,重命名后外键仍指向旧表名,会导致约束失效甚至报错。建议先删外键,重命名后再重建。
- 视图、存储过程不受自动更新:依赖该表的视图、函数、触发器等不会自动修改内部表名,需手动检查并调整。
替代方案:CREATE + DROP(不推荐用于生产)
虽然可用 CREATE TABLE new AS SELECT * FROM old 再 DROP TABLE old 实现“重命名”,但存在明显缺陷:
- 不保留原表的索引、主键、自增属性、字符集、注释等元数据;
- 无法保证原子性,中间状态可能影响业务;
- 大数据量时效率低,还可能锁表较久。
因此,除非特殊情况(如需同时修改表结构),否则应优先使用 RENAME TABLE。










