第五章.数据库完整性
1. 数据库的完整性指:数据的正确性、相容性
其中正确性可以理解为精确性,相容性可以理解为可靠性。
- 分为实体完整性、参照完整性、用户定义的完整性
2. 实体完整性:主属性不能为空
- 定义:在create table中用primary key
- 违约处理:主码不唯一则拒绝;主码各属性有空则拒绝
3. 参照完整性:**外码为空值或参照关系的主码的有效值
- 定义:在create table中用foreign key定义哪些列是外码,references指定参照哪些表的主码
- 违约处理:(1)拒绝(默认)(2)cascade级联操作 (3)设置为空值
4. 用户定义的完整性:列值非空(not null)、列值唯一(unique)、check短语
5. 触发器:定义在关系表上的一类由事件驱动的特殊过程
触发器被保存在数据库服务器中
任何用户对表的 增(insert)、删(delete)、改(update) 操作均由服务器自动激活相应的触发器
6. 定义触发器
例子:当对表sc的grade属性进行修改,若分数增加了10%,则将此次操作记录到另一个表:sc_u(sno,cno,oldgrade,newgrade)
create trigger sc_t
afer update of grade on sc //afer表示修改完成之后
referencing //referencing指出引用的变量
old row as oldtuple
new row as newtuple
for each row //指明执行频率
when (newtuple.grade>=1.1*oldrow.grade) //条件
insert into sc_u(sno,cno,oldgrade,newgrade)
values(oldtuple.sno, oldtuple.cno, oldtuple.grade, newtuple.grade);
7. 删除触发器
格式:
drop trigger <触发器名> on <表名>;