增加约束
在现有表基础上新增加约束,可以使用表约束的语法,例如:
ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;
要增加一个不能写成表约束的非空约束,可使用语法:
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
该约束会立即被检查,所以表中的数据必须在约束被增加之前就已经符合约束。
移除约束
为了移除一个约束首先需要知道它的名称。如果在创建时已经给它指定了名称,那么事情就变得很容易。否则约束的名称由系统生成,我们必须先找出这个名称。ksql 的命令 d 表名将会对此有所帮助,其他接口也会提供方法来查看表的细节。因此命令是:
ALTER TABLE products DROP CONSTRAINT some_name;
(如果处理的是自动生成的约束名称,如 $2,别忘了用双引号使它变成一个合法的标识符。)
和移除一个列相似,如果需要移除一个被某些对象依赖的约束,也需要加上 CASCADE。一个典型的例子是一个外键约束依赖于被引用列上的一个唯一主键约束。
这对除了非空约束之外的所有约束类型都一样有效。为了移除一个非空约束可以用:
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(回忆一下,非空约束是没有名称的,所以不能用第一种方式。)