本页介绍了如何重命名表以及如何添加、使用和删除表同义词。
表重命名和同义词选项
您可以使用 ALTER TABLE
语句执行以下操作:
使用同义词重命名表的运作方式
一个常见场景是重命名表并添加包含旧表名称的同义词。重命名表后,您可以更新应用,以便在您的时间表中使用新名称。在此期间,部分应用可能会使用旧名称,而其他应用可能会使用新名称。
将所有应用都更新为使用新名称后,我们建议您移除同义词。虽然使用同义词不会影响广告效果,但在同义词被舍弃之前,您无法在其他地方使用旧名称。
同义词以 synonym
对象的形式存储在架构中。一个表只能有一个同义词。
如需了解详情,请参阅重命名表格并添加同义词。
表名称切换的运作方式
当您需要在两个表之间交换名称时,可以将 RENAME TO
语句串联起来,在同一语句中重命名两个表。这样,您就可以将应用链接到其他表,而不会中断。
如需了解详情,请参阅交换表名称。
表重命名的工作原理
重命名表时,Spanner 会更改表架构中的表名称。重命名表会将所有子表与新表名称交错。表重命名还会更改以下内容对该表的引用:
- 索引
- 外键
- 变更流
- 精细访问权限控制 (FGAC)
Spanner 不会自动更新视图以使用新表名称。
如需了解详情,请参阅重命名表。
表重命名限制
表重命名存在以下限制:
- 如果表嵌套在另一个表中,则无法将表重命名为该表中某个列的名称。
- 如果表有视图,您可能需要在重命名表后删除该视图并重新创建它。
同义词的运作方式
您可以创建包含同义词的新表,也可以修改表以向其中添加同义词,而无需重命名表。例如,如果您想同时在生产环境和测试环境中使用一个数据库,就需要执行此操作。
如需了解详情,请参阅向表格添加同义词。
权限
如需重命名表或向表添加同义词,您需要拥有 spanner.databases.updateDdl
权限。如需查看或修改权限,请参阅向负责人授予权限。
重命名表并添加同义词
GoogleSQL
使用 ALTER TABLE RENAME TO ADD SYNONYM
重命名表并添加同义词。
ALTER TABLE table_name RENAME TO new_table_name, ADD SYNONYM table_name;
PostgreSQL
使用 ALTER TABLE RENAME WITH ADD SYNONYM
重命名表并添加同义词。
ALTER TABLE table_name RENAME WITH SYNONYM TO new_table_name;
以下示例展示了如何重命名表并添加同义词。例如,如果您使用以下 DDL 创建表:
GoogleSQL
CREATE TABLE Singers (
SingerId INT64 NOT NULL,
SingerName STRING(1024)
), PRIMARY KEY (SingerId);
PostgreSQL
CREATE TABLE singers (
singer_id BIGINT,
singer_name VARCHAR(1024),
PRIMARY KEY (singer_id));
您可以发出以下 DDL 请求来重命名表,并将现有名称移至 synonym
对象。
GoogleSQL
ALTER TABLE Singers RENAME TO SingersNew, ADD SYNONYM Singers;
PostgreSQL
ALTER TABLE singers RENAME WITH SYNONYM TO singers_new;
交换表名称
以下 DDL 语句会原子地更改多个表的名称。当您需要在一个或多个表对之间交换名称时,这非常有用。
GoogleSQL
使用 RENAME TABLE
。
RENAME TABLE old_name1 TO new_name1 [,old_name2 TO new_name2 ...];
PostgreSQL
ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name1
RENAME TO new_table_name1
[, ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name2
RENAME TO new_table_name2 ...];
以下示例展示了如何交换两个表的名称。这需要将第一个表重命名为临时名称,将第二个表重命名为第一个表的名称,然后将第一个表重命名为第二个表的名称。
如果您创建了以下两个表:
GoogleSQL
CREATE TABLE Singers (
SingerId INT64 NOT NULL,
SingerName STRING(1024)
), PRIMARY KEY (SingerId);
CREATE TABLE SingersNew (
SingerId INT64 NOT NULL,
FirstName STRING(1024),
MiddleName STRING(1024),
LastName STRING(1024)
), PRIMARY KEY (SingerId);
PostgreSQL
CREATE TABLE singers (
singer_id BIGINT,
singer_name VARCHAR(1024),
PRIMARY KEY (singer_id)
);
CREATE TABLE singers_new (
singer_id BIGINT,
first_name VARCHAR(1024),
middle_name VARCHAR(1024),
last_name VARCHAR(1024)
PRIMARY KEY (singer_id)
);
您可以使用以下 DDL 请求交换表名称:
GoogleSQL
RENAME TABLE Singers TO Temp, SingersNew TO Singers, Temp TO SingersNew;
PostgreSQL
ALTER TABLE singers RENAME TO temp,
ALTER TABLE singers_new RENAME TO singers,
ALTER TABLE temp RENAME TO singers_new;
应用 DDL 语句后,表名称会互换:
GoogleSQL
CREATE TABLE Singers (
SingerId INT64 NOT NULL,
FirstName STRING(1024),
MiddleName STRING(1024),
LastName STRING(1024)
), PRIMARY KEY (SingerId);
CREATE TABLE SingersNew (
SingerId INT64 NOT NULL,
SingerName STRING(1024)
), PRIMARY KEY (SingerId);
PostgreSQL
CREATE TABLE singers (
singer_id BIGINT,
first_name VARCHAR(1024),
middle_name VARCHAR(1024),
last_name VARCHAR(1024)
PRIMARY KEY (singer_id)
);
CREATE TABLE singers_new (
singer_id BIGINT,
singer_name VARCHAR(1024),
PRIMARY KEY (singer_id)
);
重命名表
如需重命名表,请使用以下语法:
GoogleSQL
使用 ALTER NAME
或 RENAME TABLE
语句。
ALTER TABLE table_name RENAME TO new_table_name;
RENAME TABLE table_name TO new_table_name;
PostgreSQL
使用 ALTER TABLE RENAME TO
语句。
ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name
RENAME TO new_table_name;
以下示例展示了用于重命名表的 DDL 请求:
GoogleSQL
RENAME TABLE Singers TO SingersNew;
PostgreSQL
ALTER TABLE singers RENAME TO singers_new;
向表格添加同义词
如需向表格中添加同义词,请执行以下操作:
GoogleSQL
ALTER TABLE table_name ADD SYNONYM synonym;
PostgreSQL
ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name ADD SYNONYM synonym;
以下示例展示了向表中添加同义词的 DDL 请求:
GoogleSQL
ALTER TABLE Singers ADD SYNONYM SingersTest;
PostgreSQL
ALTER TABLE singers ADD SYNONYM singers_test;
创建包含同义词的表
如需创建包含同义词的表,请执行以下操作:
GoogleSQL
使用 CREATE TABLE SYNONYM synonym_name
。
CREATE TABLE table_name (
...
SYNONYM (synonym)
) PRIMARY KEY (primary_key);
PostgreSQL
使用 CREATE TABLE SYNONYM synonym_name
。
CREATE TABLE table_name (
...
SYNONYM (synonym),
PRIMARY KEY (primary_key));
以下示例会创建一个表并添加同义词。
GoogleSQL
# The table's name is Singers and the synonym is Artists.
CREATE TABLE Singers (
SingerId INT64 NOT NULL,
SingerName STRING(1024),
SYNONYM (Artists)
) PRIMARY KEY (SingerId);
PostgreSQL
# The table's name is singers and the synonym is artists.
CREATE TABLE singers (
singer_id BIGINT,
singer_name VARCHAR(1024),
SYNONYM (artists),
PRIMARY KEY (singer_id));
从表中移除同义词
GoogleSQL
使用 ALTER TABLE DROP SYNONYM 从表中移除同义词。
ALTER TABLE table_name DROP SYNONYM synonym;
PostgreSQL
使用 ALTER TABLE DROP SYNONYM 从表中移除同义词。
ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name DROP SYNONYM synonym;
以下示例展示了用于从表中删除同义词的 DDL 请求:
GoogleSQL
ALTER TABLE Singers DROP SYNONYM SingersTest;
PostgreSQL
ALTER TABLE singers DROP SYNONYM singers_test;