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.激活触发器

例子:

# 3.删除触发器

# 0x7.小结
