一、实体完整性:
实体完整性规则:主属性不能取空值
关系模型中:PRIMARY KEY
单属性码可以定义为列级约束条件或者表级约束条件
多属性码则只能定义为表级约束条件
实体完整性检查和违约处理:
检查主码是否唯一,不唯一则拒绝插入或者修改
检查主码各属性是否为空,只要有一个为空就拒绝插入、修改
二、参照完整性:
CREATE TABLE中FOREIGN KEY定义外码,REFERENCES指明所参照的主码
违约处理:
拒绝执行(NO ACTION):默认策略
级联操作(CASCADE)
设置为空值(SET-NULL)
三、用户定义的完整性:
针对某一具体应用的数据必须满足的语义要求
属性上的约束条件定义:
列值非空(NOT NULL);列值唯一(UNIQUE);检查列值是否满足布尔表达式(CHECK)
属性上的数据条件检查和违约处理:
插入元组或修改属性值时,RDBMS检查约束条件是否被满足,不满足则拒绝执行操作;
元组级限制:CREATE TABLE时使用CHECK定义
四、完整性约束命名子句:
CONSTRAINT <完整性约束条件名>[NOT NULL]等
ALTER TABLE<表名> DROP CONSTRAINT<完整性约束条件名>
五、断言
CREATE ASSERTION <断言名><CHECK子句>
可以定义涉及多个表或者聚集操作的比较复杂的完整性约束条件;
断言创建之后,任何对断言中所涉及的操作都会触发关系数据库管理系统对断言的检查,使断言不为真值的操作都会被拒绝。
六、触发器:
用户定义在关系表上的一类由事件驱动的特殊过程,一旦定义,用户对表的增删改查均由服务器自动激活相应的触发器,在DBMS核心层进行完整性控制
触发器:当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行,
触发器的执行,是由触发事件激活的,并由数据库服务器自动执行。