约束(Constraint)

  • 在定义表时设置完整性约束

在定义表时可以设置约束完整性,下面的CREATE TABLE和ALTER TABLE语句都可以定义约束完整性:

CREATE TABLE staff(a int primary key, b int);

CREATE TABLE staff(a int not null, b int);

ALTER TABLE staff ADD CONSTRAINT staff_con PRIMARY KEY (a);

ALTER TABLE语句的约束完整性可能失败,因为表中已有的数据可能不满足约束完整性。在这种情况下,语句将回滚。

  • 删除现有的完整性约束

如果规则不再有效或者约束不再需要,可以删除约束完整性。可以使用ALTER TABLE语句的DROP子句删除约束。下面的语句删除一个完整性约束:

CREATE TABLE staff(a int not null, b int);

ALTER TABLE staff ADD CONSTRAINT staff_con PRIMARY KEY (a);

ALTER TABLE staff DROP CONSTRAINT staff_con;

如果有外键引用到这个表的UNIQUE或者PRIMARY KEY约束,必须在语句最后加上CASCADE,否则,将不能删除约束。

  • 延迟约束检查

在创建表时可以指定是否延迟约束检查。一个非延迟的约束将在每条命令之后马上执行检查,而延迟的约束检查将推迟到事务结尾执行。缺省是不可延迟(NOT DEFERRABLE)。