| PostgreSQL | ||
|---|---|---|
| 上一頁 | 下一頁 | |
ALTER TABLE ─ 更改表屬性
ALTER TABLE table [ * ]
ADD [ COLUMN ] column type
ALTER TABLE table [ * ]
ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE table [ * ]
RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
RENAME TO newtable
ALTER TABLE 變更一個現存表的定義。ADD COLUMN 形式用與 CREATE TABLE 一樣的語法向表中增加一個新列/字段。ALTER COLUMN 形式允許你從列/字段中設置或者刪除預設(值)。注意預設(值)只對新插入的行有效。RENAME 子句可以在不影響相關表刈酚何數據的情況下更改一個表或者列/字段的名稱。因此,表或列/字段在此命令執行後仍將是相同尺寸和型態。
如果要改變表的屬性,你必須是表的所有者。
COLUMN 關鍵字是多餘的,可以省略。
如果“*” 跟在一個表名後面,表示該命令要對該表和所有繼承級別低於該表的表進行操作﹔預設時,該屬性(更改)不會增加到任何子表或修改任何子表的相關名稱。當增加或修改一個超級表(譯注:繼承級別高的表)的屬性時總是應該這樣的。否則,像下面這樣的在繼承級上進行的查詢
SELECT NewColumn FROM SuperClass*
將不能工作,因為子表會比超級表少一個屬性。
在目前的實現裡,新列/字段的預設(值)和約束子句會被忽略。你可以隨後用 ALTER TABLE 的 SET DEFAULT 形式設置預設(值)。(你還不得不用 UPDATE 把已存在行更新為預設值。)
要修改表的結構,你必須是表的所有人。不允許更改系統表結構的任何部分。PostgreSQL 用戶手冊 裡有關於繼承的更多資訊。
請參考 CREATE TABLE 部分獲取更多有效參數的描述。
向表中增加一個 VARCHAR 列:
ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
對現存列改名:
ALTER TABLE distributors RENAME COLUMN address TO city;
對現存表改名:
ALTER TABLE distributors RENAME TO suppliers;
ADD COLUMN 形式是兼容的,除了上面說的預設(值)和約束外。ALTER COLUMN 形式是完全兼容的。
SQL92 對 ALTER TABLE 聲明了一些附加的Postgres目前還不支援的功能:
ALTER TABLE table ADD table constraint definition
ALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE }
例如,刪除表 distributors 的任何約束:
CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp;
DROP TABLE temp;
ALTER TABLE table DROP [ COLUMN ] column { RESTRICT | CASCADE }
CREATE TABLE temp AS SELECT did, city FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors (
did DECIMAL(3) DEFAULT 1,
name VARCHAR(40) NOT NULL,
);
INSERT INTO distributors SELECT * FROM temp;
DROP TABLE temp;
重命名列/字段和表名是 PostgreSQL 擴展。SQL92 沒有提供這些。
| 上一頁 | 首頁 | 下一頁 |
| ALTER GROUP | 開頭 | ALTER USER |