王珊的第五版数据库系统概论--第五章总结概述

第五章 数据库完整性

1.数据库的完整性

1.数据的正确性:是指数据是符合现实世界语义,反映了当前实际状况的。
2.数据的相容性:是指数据库同一对象在不同关系表中的数据是符合逻辑的。

3.数据的完整性:防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。防范对象:不合语义的、不正确的数据
4.数据的安全性:保护数据库 防止恶意的破坏和非法的存取,防范对象:非法用户和非法操作。

完整性约束命名子句

CONSTRAINT <完整性约束条件名><完整性约束条件>
<完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY短语、FOREIGN KEY短语、CHECK短语等。

2.断言

创建断言的语句格式
CREATE ASSERTION<断言名>
每个断言都被赋予一个名字,中的约束条件与WHERE子句的条件表达式类似。

例如;限制每一门课程最多60名学生选修

​ CREATE ASSERTION ASSE_SC_CNUM1
​ CHECK(60 >= ALL (SELECT count(*) FROM SC GROUP by cno));

3.触发器

1.触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程
2.触发器保存在数据库服务器中
3.任何用户对表的增、删、改操作均由服务器自动激活相应的触发器
4.触发器可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力

定义触发器

CREATE TRIGGER语法格式
CREATE TRIGGER <触发器名>
{BEFORE | AFTER} <触发事件> ON <表名>
REFERENCING NEW|OLD ROW AS<变量>
FOR EACH {ROW | STATEMENT}
[WHEN <触发条件>]<触发动作体>
1.触发器又叫做事件-条件-动作(event-condition-action)规则。

2.当特定的系统事件发生时,对规则的条件进行检查,如果条件成立,则执行规则中的动作,否则不执行该动作。

3.规则中的动作体可以很复杂,通常是一段SQL存储过程。

4.触发器名和表名必须在同一模式下。

5.触发器只能定义在基本表上,不能定义在视图上。

6.当基本表的数据发生变化时,将激活定义在该表上相应触发事件的触发器。

7.触发事件可以是INSERT、DELETE或UPDATE,是这几个事件的组合。

8.触发器类型,行级触发器(FOR EACH ROW)。语句级触发器(FOR EACH STATEMENT)。行级触发器表示触发事件作用有几行,那么触发动作就执行几次。语句级触发器,就是触发时间结束时,触发动作将执行一次。

9.触发动作体可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用。

将每次对表Student的插入操作所增加的学生个数记录到表StudentInsertLog中。

​ CREATE TRIGGER Student_Count
​ AFTER INSERT ON Student
​ //指明触发器激活的时间是在执行INSERT后
​ REFERENCING
​ NEW TABLE AS DELTA
​ FOR EACH STATEMENT
​ //语句级触发器, 即执行完INSERT语句后下面的触发动作体才执行一次
​ INSERT INTO StudentInsertLog (Numbers)
SELECT COUNT(*) FROM DELTA

激活触发器

触发器的执行,是由触发事件激活的,并由数据库服务器自动执行
一个数据表上可能定义了多个触发器,遵循如下的执行顺序:
(1) 执行该表上的BEFORE触发器;
(2) 激活触发器的SQL语句;
(3) 执行该表上的AFTER触发器。

删除触发器的SQL语法:DROP TRIGGER <触发器名> ON <表名>;

你可能感兴趣的:(数据库)