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,则不要求与被引用表相匹配。
外键约束也可以引用自身表中的字段。