数据库完整性
定义:数据的正确性和相容性
为了维护数据的完整性,DBMS必须要提供一种机制来检查数据库中的数据:
数据库完整性约束条件:加在数据库数据的语义约束条件
完整性检查:DBMS中检查数据是否满足完整性条件的机制
完整性约束条件的作用对象
a.列级约束:对列的数据类型,数据格式,取值范围,空值的约束
b.元组约束:元组中各字段之间的联系的约束。如,开始日期小于结束日期
c.关系约束:元组之间,关系之间的联系的约束
实现数据完整性的方法
a.服务器端:声明数据完整性 | 触发器
b.客户端:前端开发工具,在代码中实现
类型:实体完整性、域完整性、参照完整性、用户自定义完整性
a.实体完整性约束:主键
b.唯一约束:有UNIQUE的列可以有一个空值
c.参照完整性(引用完整性):外键(外键引用的列必须是主键列或者UNIQUE列)
ALTER TABLE 表名 ADD CONSTRAINT 约束名 [FOREIGN KEY] (<列>) REFERENCES 引用表名(<列名>) ON DELETE CASCADE:CASCADE 允许级联删除 NO ACTION:不允许级联删除
d.默认值约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 DEFAULT 常量表达式 FOR 列名
e.列取值范围约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (逻辑表达式)
系统对完整性约束的检查
a.主键
b.唯一值
c.默认值
d.列取值范围
外键约束的检查
子表
a.插入数据
b.修改外键
主表
a.删除数据
b.更改数据
删除约束:ALTER TABLE 表名 DROP [CONSTRAINT] 约束名
触发器--一种特殊类型的存储过程
a.定义:一段由对数据的更改操作引发的自动执行的代码。更改操作:UPDATE\INSERT\DELETE
b.作用:保证业务规则和数据完整性
c.优点:用户可用编程的方法实现复杂的处理逻辑和商业规则,增强了数据完整性约束的功能
d.语法:CREATE TRIGGER 触发器名称 ON {表名 | 视图名} {FOR | AFTER | INSTEAD OF}{[INSERT][,][DELETE][,][UPDATE]} AS SQL语句
e.注意:INSTEAD OF 同一种操作只能建一个触发器;创建、更改、DROP之外的SQL语句都可以使用触发器
f.特殊的临时表:只能在触发器代码中,由系统自动创建,结构同建立触发器的表结构
INSERTED:保存INSERT操作中新插入的数据和UPDATE操作中更新后的数据
DELETED:保存DELETE操作和UPDATE操作中更新前的数据
g.后触发型触发器
执行到引发触发器执行的操作语句 --> 执行该语句-->执行触发器
h.前触发型触发器
执行到引发触发器执行的操作语句 -->执行触发器
j.删除触发器
DROP TRIGGER 触发器名