2关系的三类完整性
# 0x0.前置知识
# 1.候选码、主码、主属性
# 0x1.三类完整性
# 一、实体完整性
简单来说:主属性不能为空。
# 1.实体完整性的说明
# 2.定义方式primary key
2-1.定义为列级约束条件:
2-2.定义为表级约束条件:
# 3.实体完整性检查和违约处理
检测方法:
# 3-1.全表扫描
# 3-2.索引建树
# 二、参照完整性
简单来说:引用不能不存在,有则必须指向一个系的主码。
例子:
如下:外码可为空,但是不能不存在。
# 1.外码
注意:理论上外码不可以作为关系R的码!考试中也是不可以,但是实际上运用时可以这样使用来提高效率
# 2.参照完整性规则
# 3.定义方式foreign key<references>
例子:
# 4.参照完整性检查和违约处理
# 4-1.汇总
# 4-2.违约处理说明
- 拒绝(NO ACTION)执行
- 默认策略
- 级联(CASCADE)操作,即多表一起被联系修改,需要如下4-3显式说明:
- 设置为空值(SET-NULL)
- 对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值
# 4-3.建表时显式说明级联操作
# 三、用户自定义的完整性
比较杂乱,千奇百怪。
# 0.概念:
比如:
性别在建立DBMS系统时就规定只有男女两种选择,还如:
# 1.属性上的约束条件
# 1-1.列值非空(NOT NULL)
# 1-2.列值唯一(UNIQUE)
# 1-3.检查列值是否满足一个布尔表达式(CHECK)
# 2.元组上的约束条件的定义
例子:
# x.属性上的约束条件检查和违约处理
# 0x2.完整性约束命名子句(constraint)
例子:
# 0x3.修改表中的完整性限制(alter)
例子:
# 0x4.域中的完整性限制(domain)
删除条件和增加条件:
# 0x5.对整体进行约束:断言(assertion)
例子:
删除断言:
# 0x6.触发器(trigger)
# 1.定义触发器
语法说明:
行级触发器(FOR EACH ROW)和语句级触发器(FOR EACH STATEMENT)区别:
触发条件和触发动作体:
例子:
# 2.激活触发器
例子: