一、完整性约束条件
1.实体完整性
实体完整性:理解为对客观世界的实体来说,例如学生的学号这一属性,应该是唯一存在的。所以实体完整性表现为:PRIMARY KEY(主键)
PRIMARY KEY:属性唯一,属性不为空。
注意:单属性主码才可以定义为列级实体完整性,多属性主码只能定义为表级实体完整性。
2.参照完整性
参照完整性:多个关系表之间如果有外键相互参照的话,对于某表的操作势必会影响另一个表。这种改变是否符合原来关系表之间的规则就叫做是否遵守参照完整性。
参照完整性违规处理的举例:
FOREIGN KEY(Sno) REFERENCES Student(Sno) ON DELETE CASCADE;
注意这里的主从对象,当对Student的Sno属性进行删除时,就会级联删除当前表的Sno属性。主对象是Student表,从对象是当前表。
3.用户定义完整性
用户定义完整性:即用户自己添加的约束条件,例如 NOT NULL,UNIQUE,还有更一般的表示方式:CHECK子句,当CHECK中的条件满足时,才允许对数据库执行插入元组或修改元组的操作。
二、完整性约束命名子句
1.引入完整性约束命名子句的目的
以往的约束条件在CREATE TABLE时创建,比如 NOT NULL等约束条件,这些条件在表创建之后,是无法修改的,除非删除掉该表,然后再重新建表,重新指定约束条件。当一个表中有几千条列的时候,会显得十分繁琐,所以引入完整性约束命名子句。好处是可以通过ALTER对表中的约束条件进行增加删除更改等操作,十分方便。
对表的完整性约束命名子句的更改操作举例:
ALTER TABLE Student
DROP CONSTRAINT C4;
代表删除Student表的约束条件C4
三、断言
1.断言的理解
SQL中可以使用CREATE ASSERTION语句,通过声明断言来指定更具一般性的约束。可以定义涉及多个表或聚集操作的比较复杂的完整性约束。断言创建以后,任何对断言中涉及的表的操作都会触发DBMS对断言的检查,任何使断言不为真值的操作都会被拒绝执行。一个断言就是一个谓词表达式,它表达了希望数据库总能满足的条件,表约束与列约束就是一些特殊的断言。