1. 添加主鍵
alter table goods add primary key(sid);
2. 添加外鍵
alter table orders add foreign key(goods_id) references goods(sid) on update cascade on delete cascade;
on update cascade: 被引用行更新時,引用行自動更新;
on update restrict: 被引用的行禁止更新;
on delete cascade: 被引用行刪除時,引用行也一起刪除;
on dellete restrict: 被引用的行禁止刪除;
3. 刪除外鍵
alter table orders drop constraint orders_goods_id_fkey;
4. 添加唯一約束
alter table goods add constraint unique_goods_sid unique(sid);
5. 刪除默認值
alter table goods alter column sid drop default;
6. 修改字段的數據類型
alter table goods alter column sid type character varying;
7. 重命名字段
alter table goods rename column sid to ssid;
外鍵約束之表約束寫法完整語法:
[ CONSTRAINT constraint_name ] FOREIGN KEY ( column_name [, … ] ) REFERENCES reftable [ ( refcolumn [, … ] ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ]
[ ON DELETE action ] [ ON UPDATE action ]
當刪除被引用行或者更新被引用列時,對於引用表或引用列,不同的action有不同的行為。可用的action如下:
- NO ACTION
如果違反外鍵約束會產生一個錯誤。如果約束被延遲,那么到事務結束檢查約束時如果仍然因為存在一個引用行而違反外鍵約束,則仍會產生錯誤。這是默認值。其他的動作action都不能被延遲。
- RESTRICT
違反外鍵約束會產生一個錯誤。
- CASCADE
級聯刪除或更新。分別刪除一個引用行或者更新一個引用列的值。
- SET NULL
設置引用列(referencing column(s))的值為null
- SET DEFAULT
設置引用列為其缺省值。如果缺省值不是null,那么仍然需要被引用表中有一條記錄的被引用字段的值與之匹配,否則操作會失敗。
[ MATCH matchtype ]
當向引用表的引用列(referencing column(s))插入數據時,根據給定的匹配規則matchtype匹配被引用表的被引用列的值。匹配規則如下:
- MATCH FULL
不允許多列外鍵約束中的任何一個為null,除非他們全部為null,這樣不要求被引用表中有與其匹配的數據。
- MATCH PARTIAL
此特性尚未實現
- MATCH SIMPLE
這是默認值。允許外鍵約束中的任何一列為null,只要外鍵約束中的一列為null,則不要求與被引用表相匹配。
外鍵約束也可以引用自身表中的字段。