完整约束是一组完整的数据约束规则,它规定了数据模型中数据必须符合的条件,对数据做任何操作是都必须保证符合完整性约束条件。
关系模型中共有三类完整性约束:实体完整性,参照完整性和用户定义的完整性。
实体完整性
在SQL中,实体完整性是通过主码(Primary Key)的定义来实现的。被定义为主码的属性或属性组必须满足两个条件:非空且唯一。
定义主码的方法:一种是在属性后加关键字, 如,StudentNO char(6) PRIMARY KEY
另一种是在属性表中加入额外的定义主码的子句, 如,PRIMARY KEY(StudentNO)
参照完整性
第二种约束模型,就是利用外码的说明来限制相关表中某些属性取值。外码的取值只有两种:取空值;取参照关系中的主码值。
说明外码的方法:一种是直接在改属性的说明(属性名、类型)后加上关键字REFERENCES,后跟对应表的主码说明,如,TeacherNO char(6) REFERENCESTeacherInfo(TeacherNO)
另一种在属性清单表的最后,加上外码的说明子句,如,FOREIGN KEY(TeacherNO) REFERENCES TeacherInfo(TeacherNO)
注:当用户违反了上述规则时,如何保持约束关系?
SQL提供了三种可选方案:
一:限制策略(RESTRIC),默认使用,任何违反参照完整性约束的增删改操作将被系统拒绝;
二:级联策略(CASCADE),父表删改主码时,子表中外码也将被删改;
三:置空策略(SET NULL),父表删改元组时,子表中外码被置空。
表A的主码被说明成表B的外码,则称A为父表,B为子表。
用户自定义完整性约束
SQL提供了非空约束、对属性的CHECK约束、对元组的CHECK约束、触发器等实现。
原文:http://www.cnblogs.com/elroye/p/5264799.html