本頁面說明如何在 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫中,重新命名資料表,以及如何新增、使用及刪除資料表同義詞。
資料表重新命名和同義詞選項
您可以使用 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;