RENAME TABLE 语句 用于更改表名称,同时该语句也可以用于将表移动至另一个数据库中。

注意:无法重命名和视图相关联的表。详情请参阅 视图依赖

所需权限

用户必须对该表具有 DROP 权限 和表所在数据库的CREATE权限。 若想要移动表至另一个数据库,用户必须具有源和目的两个数据库的 CREATE 权限。

概要

图片

参数

参数 描述
IF EXISTS 仅当表存在时才会执行重命名操作
current_name 当前需要变更的表原名
new_name 表变更至的新名称,新名称在该数据库中必须具有唯一性且遵循 标识符 规则。如果没有设置默认数据库, 必须按照 database.name 格式来命名。

存在 UPSERTINSERT ON CONFLICT 语句,通过使用一个名为 excluded 的临时表去处理变更期间的唯一性冲突。 因此不推荐使用 excluded 去命名任何一张表。

查看变更过程

当开始表变更操作时,CockroachDB将会生成一个job,可以通过SHOW JOBS去查看。

例子

重命名表

SHOW TABLES FROM db1;

+--------+
| Table  |
+--------+
| table1 |
| table2 |
+--------+
 ALTER TABLE db1.table1 RENAME TO db1.tablea

结果

SHOW TABLES FROM db1;
+--------+
| Table  |
+--------+
| table2 |
| tablea |
+--------+

为了避免该表不存在而报错,可以使用 IF EXISTS:

> ALTER TABLE IF EXISTS db1.table1 RENAME TO db1.table2;

移动表

若要将一张表从一个数据库移动至另一个数据库,使用上述语法时需在ALTER TABLE 后面指定源数据库,并且在RENAME TO 后面指定目标数据库:

SHOW DATABASES;

+----------+
| Database |
+----------+
| db1      |
| db2      |
| system   |
+----------+
SHOW TABLES FROM db1;
+--------+
| Table  |
+--------+
| table2 |
| tablea |
+--------+

SHOW TABLES FROM db2;

+-------+
| Table |
+-------+
+-------+
ALTER TABLE db1.tablea RENAME TO db2.tablea
SHOW TABLES FROM db1;
+--------+
| Table  |
+--------+
| table2 |
+--------+
SHOW TABLES FROM db2;
+--------+
| Table  |
+--------+
| tablea |
+--------+

其他