View a markdown version of this page

ALTER TABLE - Amazon Aurora DSQL

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

ALTER TABLE

ALTER TABLE 可變更資料表的定義。

支援的語法

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema ALTER TABLE ASYNC [ IF EXISTS ] [ ONLY ] name [ * ] VALIDATE CONSTRAINT constraint_name where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER [ COLUMN ] column_name DROP DEFAULT ALTER [ COLUMN ] column_name DROP NOT NULL ALTER [ COLUMN ] column_name DROP EXPRESSION [ IF EXISTS ] ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...] ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ] ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ADD table_constraint NOT VALID ADD table_constraint_using_index DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } and table_constraint is: [ CONSTRAINT constraint_name ] CHECK ( expression ) and table_constraint_using_index is: [ CONSTRAINT constraint_name ] UNIQUE USING INDEX index_name

說明

ADD [ COLUMN ] [ IF NOT EXISTS ]

此表單會使用與 相同的語法,將新資料欄新增至資料表CREATE TABLE。如果已指定 IF NOT EXISTS ,且具有此名稱的資料欄已存在,則不會擲回錯誤。

DROP [ COLUMN ] [ IF EXISTS ]

此表單會從資料表捨棄資料欄。涉及 欄的索引和資料表限制條件會自動捨棄,但主索引鍵限制條件除外。不支援捨棄主索引鍵資料欄。如果移除資料欄會導致統計資料僅包含單一資料欄的資料,也會移除參考捨棄資料欄的多變量統計資料。如果資料表外CASCADE的任何內容取決於資料欄,例如外部索引鍵參考或檢視,您將需要說出 。如果已指定 IF EXISTS 且資料欄不存在,則不會擲回錯誤。在此情況下,會改為發出通知。

SET/DROP DEFAULT

這些表單會設定或移除欄的預設值 (其中移除等同於將預設值設定為 NULL)。新的預設值僅適用於後續 INSERTUPDATE命令;它不會導致資料表中已存在的資料列變更。

DROP NOT NULL

此表單會變更資料欄以允許 null 值。

DROP EXPRESSION [ IF EXISTS ]

此表單會將儲存產生的資料欄轉換為正常的基礎資料欄。資料欄中的現有資料會保留,但未來的變更不會再套用產生表達式。如果已指定 DROP EXPRESSION IF EXISTS ,且資料欄不是產生的資料欄,則不會擲回錯誤。在此情況下,會改為發出通知。

ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
SET GENERATED { ALWAYS | BY DEFAULT }
DROP IDENTITY [ IF EXISTS ]

這些表單會變更資料欄是身分資料欄,或變更現有身分資料欄的產生屬性。如需詳細資訊,請參閱 CREATE TABLE。如同 SET DEFAULT,這些表單只會影響後續 INSERTUPDATE命令的行為;它們不會導致資料表中已有的資料列變更。

sequence_option 是 支援的選項,ALTER SEQUENCE例如 INCREMENT BY。這些形式會變更以現有身分資料欄為依據的序列。

注意

使用 時,Amazon Aurora DSQL 需要明確CACHEADD GENERATED AS IDENTITY。此外,僅資料欄支援身分bigint資料欄。

使用身分資料欄時,應仔細考慮快取值。如需詳細資訊,請參閱 CREATE SEQUENCE 頁面上的重要標註。

如需如何根據工作負載模式最佳使用身分資料欄的指引,請參閱 使用序列和身分資料欄

SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }

此表單會設定資料欄的儲存模式。如需可用儲存模式的詳細資訊,請參閱 儲存模式 CREATE TABLE頁面上的 。

ADD table_constraint NOT VALID

此表單會將新的CHECK限制條件新增至資料表。在 Aurora DSQL 中,透過 新增CHECK的限制條件ALTER TABLE ADD CONSTRAINT必須使用 NOT VALID選項。Aurora DSQL 會建立限制,但不會立即針對現有資料進行驗證。這允許在不掃描整個資料表的情況下新增限制條件。限制條件會立即套用至所有新的資料列和更新。

使用 新增限制條件後NOT VALID,請使用 ALTER TABLE ASYNC ... VALIDATE CONSTRAINT來驗證現有資料是否也符合限制條件。驗證會以非同步 DDL 任務執行。您可以使用 監控其進度sys.jobs

ADD table_constraint_using_index

此表單會根據現有的唯一索引,將新的UNIQUE限制新增至資料表。索引的所有資料欄都會包含在限制中。

索引必須處於 VALID 狀態;不支援在目前建置索引時使用索引新增唯一限制條件。

如果提供限制條件名稱,則會重新命名索引以符合限制條件名稱。否則,限制條件的名稱將與索引相同。

執行此命令後,限制條件會「擁有」索引,就像索引是由一般CREATE UNIQUE INDEX ASYNC命令建置一樣。特別是,捨棄限制條件也會使索引消失。

VALIDATE CONSTRAINT

此表單會驗證先前使用 NOT VALID選項建立的限制。此命令是一種非同步 DDL 操作,不會封鎖其他交易。當您執行 ALTER TABLE ASYNC ... VALIDATE CONSTRAINT 時,Aurora DSQL 會立即傳回 job_id

您可以使用 sys.jobs 系統檢視監控此非同步作業的狀態。您也可以使用 sys.wait_for_job('job_id')來封鎖目前的工作階段,直到驗證完成或失敗為止。

驗證任務會掃描整個資料表,以確認所有現有的資料列都符合限制條件。驗證成功完成後,Aurora DSQL 會將限制標記為有效,且查詢規劃器會針對所有查詢強制執行限制。如果因為現有資料列違反限制條件而驗證失敗,則任務會失敗,且限制條件會保持在 NOT VALID 狀態。

此命令只會驗證您使用 NOT VALID選項建立的限制。嘗試驗證已經有效的限制條件會導致錯誤。

DROP CONSTRAINT [ IF EXISTS ]

此表單會在資料表上捨棄指定的限制條件,以及限制條件下的任何索引。如果IF EXISTS已指定 且限制條件不存在,則不會擲回錯誤。在此情況下,會改為發出通知。

OWNER TO

此表單會將資料表的擁有者變更為指定的使用者。

RENAME

RENAME 表單會變更資料表的名稱、資料表中個別資料欄的名稱,或資料表的限制名稱。重新命名具有基礎索引的限制條件時,索引也會重新命名。對儲存的資料沒有影響。

SET SCHEMA

此表單會將資料表移至另一個結構描述。資料表資料欄擁有的相關索引、限制條件和序列也會一併移動。

Parameters

IF EXISTS

如果資料表不存在,請勿擲回錯誤。在此情況下會發出通知。

name

要變更之現有資料表的名稱 (選擇性符合結構描述資格)。如果在資料表名稱之前指定 ONLY ,則只會變更該資料表。如果ONLY未指定 ,則會變更資料表及其所有子資料表 (如果有的話)。或者, * 可以在資料表名稱後面指定,以明確指出包含子資料表。

column_name

新資料欄或現有資料欄的名稱。

new_column_name

現有資料欄的新名稱。

new_name

資料表的新名稱。

data_type

新資料欄的資料類型。

table_constraint

CHECK 限制條件定義。在 Aurora DSQL 中,必須使用 搭配 NOT VALID選項新增CHECK限制ALTER TABLE ADD CONSTRAINT條件。如需完整的CHECK限制語法,CREATE TABLE請參閱 。

constraint_name

新的或現有限制條件的名稱。

CASCADE

自動捨棄依賴捨棄資料欄或限制條件的物件 (例如參考資料欄的檢視),然後捨棄依賴這些物件的所有物件。

RESTRICT

如果有任何相依物件,請拒絕捨棄資料欄或限制條件。這是預設行為。

new_owner

資料表新擁有者的使用者名稱。

new_schema

資料表將移至其中的結構描述名稱。

備註

DROP COLUMN 表單不會實際移除資料欄,只會讓 SQL 操作看不到它。資料表中的後續插入和更新操作會儲存資料欄的 null 值。因此,捨棄資料欄速度很快,但不會立即減少資料表的磁碟上大小,因為捨棄資料欄佔用的空間不會回收。隨著現有資料列的更新,將會隨著時間回收空間。

如果將捨棄的資料欄參考為主索引鍵中的INCLUDE資料欄,則會更新主索引鍵定義以移除捨棄的資料欄。

Aurora DSQL 中的資料表在資料表生命週期內一次最多可以有 255 個作用中資料欄,最多可以有 1600 個資料欄。捨棄資料欄不會回收其屬性編號。它會將其從一組作用中資料欄中移除,但捨棄的資料欄會繼續計入 1600 個資料欄的生命週期限制。如需詳細資訊,請參閱Aurora DSQL 資料庫限制