更改表的定義。
文法
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;