关系数据库的完整性规则是数据库设计的重要内容。绝大部分关系型数据库管理系统RDBMS都可自动支持关系完整性规则,只要用户在定义(建立)表的结构时,注意选定主键、外键及其参照表,RDBMS可自动实现其完整性约束条件。
实体完整性
实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。
参照完整性
参照完整性(Referential Integrity)属于表间规则。对于相互关联的表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。
在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值。
数据发生不一致时,系统有三种策略可以处理这种情况。
no action
拒绝执行,该策略一般是默认策略。
cascade
级联,删除或修改所有不一致的元组。
null
将所有不一致的元组对应的属性设置为空值。
用户自定义完整性
由用户定义的完整性要求,一般有数据库管理系统检验这类完整性。
属性上的约束条件定义:
- 列值非空
- 列值唯一
- check检验
元组上的约束条件定义:
check
触发器
触发器(trigger)是由事件来触发的保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由DDL和DML等语句执行触发的。
定义触发器:
1 create trigger tri_insert 2 on student 3 for insert 4 as 5 declare @student_idchar(10) 6 select @student_id=s.student_id from students 7 inner join insertedion s.student_id=i.student_id 8 if @student_id=‘0000000001‘ 9 begin 10 raiserror(‘不能插入1的学号!‘,16,8) 11 rollbacktran 12 end 13 go
触发器执行顺序:
before,sql,after
同一个表上多个before触发器,遵循谁先创建谁执行的顺序。
删除触发器
drop trigger <触发器名> on <表名>
时间: 2024-10-13 06:21:04