全部產品
Search
文件中心

PolarDB:ALTER TABLE

更新時間:Jul 06, 2024

更改表的定義。

文法

ALTER TABLE name
  action [, ...]
ALTER TABLE name
  RENAME COLUMN column TO new_column
ALTER TABLE name
  RENAME TO new_name

其中,action可以為以下語句之一:

ADD column type [ column_constraint [ ... ] ]
DROP COLUMN column
ADD table_constraint
DROP CONSTRAINT constraint_name [ CASCADE ]
ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]
ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
DISABLE TRIGGER [ trigger_name | ALL | USER ]
OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING }

說明

當基礎資料表上建有簡單視圖,支援直接修改基礎資料表列的資料類型(alter table alter column),無需先刪除相關性檢視。

ALTER TABLE更改現有表的定義。有多種子格式:

  • ADD column type:此格式使用與CREATE TABLE相同的文法將新列添加到表中。

  • DROP COLUMN:此格式從表中刪除列。涉及該列的索引和資料表條件約束也將自動刪除。

  • ADD table_constraint:此格式使用與CREATE TABLE相同的文法將新約束添加到表中。

  • DROP CONSTRAINT:此格式刪除表上的約束。目前,表上的約束不必具有唯一名稱,因此可以有多個約束與指定的名稱匹配。將刪除所有匹配的約束。

  • RENAME:RENAME格式更改表(或索引、序列或視圖)的名稱,或者更改表中單獨列的名稱。這對儲存的資料沒有任何效果。

您必須擁有表才能使用ALTER TABLE。

說明

當您調用ADD COLUMN時,表中的所有現有行將使用該列的預設值初始化(如果未指定DEFAULT子句,則為null)。添加一個具有非null預設值的列時,需要重寫整個表。對於較大的表而言,這可能需要相當長的時間,並且會臨時需要兩倍的磁碟空間。添加CHECK或NOT NULL約束需要掃描表來驗證現有行是否滿足約束。

DROP COLUMN格式不會實際刪除列,而只是使列對SQL操作不可見。表中後面的插入和更新操作會為該列儲存null值。因此,刪除列速度很快,但不會立即減少表在磁碟上佔用的大小,因為所刪除列佔用的空間未回收。隨著時間推移,在更新現有行之後,將回收該空間。

不允許更改系統目錄表的任何部分。請參閱CREATE TABLE,進一步瞭解有效參數的說明。

參數

參數

說明

name

要變更的現有表的名稱(可能是schema限定的)。

column

新列或現有列的名稱。

new_column

現有列的新名稱。

new_name

表的新名稱。

type

新列的資料類型。

table_constraint

表的新資料表條件約束。

constraint_name

要刪除的現有約束的名稱。

CASCADE

自動刪除依賴於所刪除約束的對象。

樣本

將類型為VARCHAR2的列添加到表中:

ALTER TABLE emp ADD address VARCHAR2(30);

從表中刪除列:

ALTER TABLE emp DROP COLUMN address;

重新命名現有列:

ALTER TABLE emp RENAME COLUMN address TO city;

重新命名現有表:

ALTER TABLE emp RENAME TO employee;

將檢查約束添加到表中:

ALTER TABLE emp ADD CONSTRAINT sal_chk CHECK (sal > 500);

從表中刪除檢查約束:

ALTER TABLE emp DROP CONSTRAINT sal_chk;