数据库系统概论(第5版)王珊 详细知识清单 期末复习速成 考前冲刺 面试——(第一篇 基础篇)
目录
一.数据库基本概念
1.两类模型
2数据模型组成要素
3数据库系统结构
二.关系数据库
1.三种类型(关系)
2.关系模式
3.关系操作
4.关系语言:结构化查询语言
5.关系完整性
6.关系代数
三.关系数据库语言SQL
1.1定义模式
1.2删除模式
2.1定义表
2.2修改基本表
2.3删除基本表
3. 索引的建立与删除
4.数据字典
5.数据查询(重点*)
5.1语句格式
5.2选择表中的若干元组
5.3 ORDER BY子句
5.4聚集函数
5.5 GROUP BY子句
5.6.连接查询
6.数据更新
7.空值处理
8.视图
四.数据库安全性
1. 计算机安全性概述
2. 数据库安全性控制
2.1常用的存取控制方法
2.2授权与回收
2.3创建数据库模式的权限
2.4数据库角色
2.5强制存取控制方法
2.6视图机制
2.7审计
2.8数据加密
五.数据库的完整性
数据库的完整性:
1.1数据库的完整性
1.2关系模型的实体完整性
1.3 参照完整性
1.4用户定义的完整性
1.5断言
1.6触发器
下接数据库系统概论(第5版)王珊 详细知识清单 期末复习速成 考前冲刺 面试——(第二篇 设计与系统篇)_字母符号数字的博客-CSDN博客
一.数据库基本概念
1.数据(Data):描述事物的符号记录 数据与其语义不可分
2.数据库(DB):长期存储在计算机内,有组织,可共享的大量数据集合
3.数据库管理系统(DBMS):计算机的基础软件
功能:
(1)定义
(2)组织,存储
(3)操纵(增,删,改,查)
(4)运行管理(安全性,完整性,并发控制,恢复)
(5)建立,维护
(6)其他
4.数据库系统(DBS)
数据库系统(DBS) | 数据库DB |
数据库管理系统DBMS | |
应用程序 | |
数据库管理员DBA |
1.数据模型 :对现实世界数据特征的抽象
1.两类模型
(1)概念模型----------》用户
(2)数据模型----------》机器
2数据模型组成要素
(1)数据结构:组成对象和对象之间联系
(2)数据操作:对对象型值允许操作和规则
(3)完整性约束条件
1.2.2概念模型(实体,属性,码,实体型,实体集,联系)
1.2.3数据模型(层次,网状,关系,面向对象,对象关系,半结构化)
层次模型(层次模型采用树形结构):(1)只有一个根节点 (2)根以外有且只有一个双亲结点
优点:简单,查询效率高; 缺点:多对多表示不自然,限制多
网状模型:————典型代表(DBTG系统)
特点:直接处理一对多
关系模型:操作对象和结果都是关系
3数据库系统结构
数据库系统三级模式和两级映象的系统结构保证了数据库系统中的数据能够具有较高的逻辑独立性与物理独立性。
1.三级模式
(1)模式(逻辑模式)
(2)外模式(子模式)
(3)内模式(存储模式)压缩加密————保证数据库安全性的一个有力措施 ,每个用户只能看见和访问所对应的外模式中的数据
一个数据库只有一个内模式
2.二级映像
(1)外模式/模式——逻辑独立性
(2)模式/内模式——物理独立性
二.关系数据库
1.三种类型(关系)
(1)基本表(实际存在)
(2)查询表
(3)视图表
2.关系模式
R(U, D, DOM, F)
R:关系名
U:属性集
D:来自的域
DOM:映像集合
F:数据属性间关系集合
3.关系操作
查询,插入,删除,修改
查询(选择,投影,并,差,笛卡尔)
4.关系语言:结构化查询语言
5.关系完整性
(1)实体完整性(不能取空值(主码))
(2)参照完整性
(3)用户定义完整性
6.关系代数
1.(选择)查询信息系(is)所有学生:sdept='is'(Student)
2.(投影)查询学生姓名和所在系:sname,sdept(Student)
基本格式
———— (____(表表))
3.连接查询
关系代数运算 并、差、交、笛卡尔积、投影、选择、连接、除 (有“全部”字眼)
基本运算 并、差、笛卡尔积、投影、选择 交、连接、除
三.关系数据库语言SQL
数据定义
1.1定义模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
1.2删除模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
CASCADE(级联) 删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制) 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
2.1定义表
建立“学生”表Student,学号是主码,姓名取值唯一CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/ Sname CHAR(20) UNIQUE, /* Sname取唯一值*/ Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );
PRIMARY KEY 主码 UNIQUE 约束,取唯一值
2.2修改基本表
ALTER TABLE <表名>
[ ADD [COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ];
[例】向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATE;
2.3删除基本表
DROP TABLE <表名> [CASCADE|RESTRICT];
若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图也自动删除。
3. 索引的建立与删除
建立索引的目的:加快查询速度
B+树索引 散列(HASH)索引
3.1建立索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
3.2删除索引
DROP INDEX <索引名>;
3.3修改索引
ALTER INDEX<旧名>RENAME TO<新索引名>
4.数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息: 关系模式定义, 视图定义 ,索引定义 ,完整性约束定义 ,各类用户对数据库的操作权限 ,统计信息等
5.数据查询(重点*)
5.1语句格式
SELECT [ALL|DISTINCT] <目标>
FROM <表名或视图名>[, <表名或视图名> ]
[ WHERE <条件> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组
HAVING短语:只有满足指定条件的组才予以输出
ORDER BY子句:对查询结果表按指定列值的升序(ASC)或降序(DESC)排序
[例] 查询全体学生的详细记录
SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或 SELECT * FROM Student;
5.2选择表中的若干元组
(1)消除取值重复的行(DISTINCT)
[例] 查询考试成绩有不及格的学生的学号。 SELECT DISTINCT Sno FROM SC WHERE Grade<60;
(2)查询满足条件的元组
① 空值: IS NULL 或 IS NOT NULL
[例] 某些学生选修课程后没有参加考试,所以有选课记录,但没 有考试成绩。查询缺少成绩的学生的学号和相应的课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NULL
多重条件 and or not 连接
②范围: (NOT) BETWEEN 20 AND 23 (20<=x<=30)
[例] 查询年龄不在20~23岁之间的学生姓名、系别和年龄 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;
③确定集合:IN <值表>, NOT IN <值表>
[例]查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN ('IS','MA','CS');
④ 字符匹配
“%”(百分号)代表任意长度(长度可以为0)的字符串。 例如a%b 表示以a 开头,以b 结尾的任意长度的字符串
通配符“_”(下横线)代表任意单个字符。 例如a_b 表示以a 开头,以b 结尾的长度为3的任意字符串 如果字符串中包含通配符,使用ESCAPE ’\’。
[例] 查询名字中第2个字为"阳"字的学生的姓名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE ‘_阳%’;
5.3 ORDER BY子句
升序:ASC; 降序:DESC;
[例] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SC WHERE Cno= ' 3 ' ORDER BY Grade DESC;
5.4聚集函数
COUNT(属性名) 计算一列中值的个数
COUNT(*) 计算元组个数
SUM(属性名) 求某一属性值的总和(此列必须是数值型)
AVG(属性名) 求某一属性值的平均值(此列必须是数值型)
MAX(属性名) 求某一属性值的最大值
MIN(属性名) 求某一属性值的最小值
函数可用于SELECT、WHERE、HAVING子句中
5.5 GROUP BY子句 ——————对查询结果进行分组
[例] 求各个课程号及相应的选课人数。SELECT Cno,COUNT(Sno)FROM SCGROUP BY Cno; 查询结果:Cno COUNT(Sno)1 222 343 444 335 48
WHERE子句中是不能用聚集函数作为条件表达式,用HAVING短句
[例] 查询平均成绩大于等于90分的学生学号和平均成绩 下面的语句是不对的:
SELECT SNO,AVG(Grade) FROM SC GROUP BY SNO 先分组 HAVING AVG(Grade)>=90; 再筛选
5.6.连接查询(同时涉及多个表的查询)
1.等值连接:连接运算符为=
2.自身连接:一个表与其自己进行连接
[例35]查询每一门课的间接先修课(即先修课的先修课)
SELECT FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno = SECOND.Cno;
3.外连接
4.多表连接
[例]查询每个学生的学号、姓名、选修的课程名及成绩
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course /*多表连接*/
WHERE Student.Sno = SC.Sno and SC.Cno = Course.Cno;
5.嵌套查询
SELECT Sname /*外层查询/父查询*/
FROM Student
WHERE Sno IN
(SELECT Sno /*内层查询/子查询*/
FROM SC
WHERE Cno= ' 2 ');
5.1带有IN谓词的子查询
[例]查询选修了课程名为“信息系统”的学生学号和姓名SELECT Sno,Sname ③ 最后在Student关系中FROM Student 取出Sno和SnameWHERE Sno IN(SELECT Sno ② 然后在SC关系中找出选FROM SC 修了3号课程的学生学号WHERE Cno IN(SELECT Cno ① 首先在Course关系中找出FROM Course “信息系统”的课程号,为3号WHERE Cname= ‘信息系统’));
用连接查询实现例题选修了课程名为“信息系统”的学生学号和姓名SELECT Student.Sno,SnameFROM Student,SC,CourseWHERE Student.Sno = SC.Sno ANDSC.Cno = Course.Cno ANDCourse.Cname=‘信息系统’;
5.2 带有比较运算符的子查询
[例]找出每个学生超过他选修课程平均成绩的课程号。(相关子查询)
SELECT Sno, Cno
FROM SC x
WHERE Grade >=
(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
5.3 带有ANY(SOME)或ALL谓词的子查询
ANY:任意一个值 ALL:所有值
[例] 查询非计算机系中比计算机科学系所有学生年龄都小的学生姓名及年龄。
方法一:用ALL谓词
SELECT Sname,Sage FROM Student WHERE Sage < ALL(SELECT Sage FROM Student WHERE Sdept= ' CS ') AND Sdept <> ' CS ’;
方法二:用聚集函数
SELECT Sname,Sage FROM Student WHERE Sage <(SELECT MIN(Sage) FROM Student WHERE Sdept= ' CS ') AND Sdept <>' CS ’;
5.4(难点)带有EXISTS谓词的子查询(代表的是存在量词),有“至少”,“全部”字影;
6.集合查询
集合操作的种类
并操作 UNION
交操作 INTERSECT
差操作 EXCEPT
小结:
SELECT语句的一般格式
SELECT [ALL|DISTINCT] <目标列表达式> [别名] [ ,<目标列表达式> [别名]] … FROM <表名或视图名> [别名] [ ,<表名或视图名> [别名]] … [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式>]] [ORDER BY <列名2> [ASC|DESC]
6.数据更新
6.1两种插入数据方式 插入元组 插入子查询
插入元组:
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );
功能 将新元组插入指定表中
[例]将学生张成民的信息插入到Student表中。INSERTINTO StudentVALUES ('201215126','张成民','男’,18,'CS');
6.2修改(更新)数据
语句格式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
如果省略WHERE子句,表示要修改表中的所有元组
三种修改方式 :
修改某一个元组的值
[例] 将学生201215121的年龄改为22岁UPDATE StudentSET Sage=22WHERE Sno=' 201215121 ';
修改多个元组的值
[例] 将所有学生的年龄增加1岁。UPDATE StudentSET Sage= Sage+1;
带子查询的修改语句
[例] 将计算机科学系全体学生的成绩置零。UPDATE SCSET Grade=0WHERE Sno IN(SELETE SnoFROM StudentWHERE Sdept= 'CS' );
6.3删除数据
语句格式
DELETE
FROM <表名>
[WHERE <条件>];
功能: 删除指定表中满足WHERE子句条件的元组
WHERE子句 指定要删除的元组 缺省表示要删除表中的全部元组
三种删除方式 :
删除某一个元组的值
删除多个元组的值
带子查询的删除语句
7.空值处理
空值就是“不知道”或“不存在”或“无意义”的值
属性定义(或者域定义)中 有NOT NULL约束条件的不能取空值 ,加了UNIQUE限制的属性不能取空值 ,码属性不能取空值
[例 ] 选出选修1号课程的不及格的学生以及缺考的学生。
SELECT Sno FROM SC WHERE Grade < 60 AND Cno='1' UNION SELECT Sno FROM SC WHERE Grade IS NULL AND Cno='1' 或者 SELECT Sno FROM SC WHERE Cno='1' AND (Grade<60 OR Grade IS NULL);
8.视图(外模式)
视图的特点:
虚表,是从一个或几个基本表(或视图)导出的表
只存放视图的定义,不存放视图对应的数据
基表中的数据发生变化,从视图中查询出的数据也随之改变
8.1建立视图
语句格式
CREATE VIEW <视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
WITH CHECK OPTION 对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则决定具体系统的实现。
[例] 建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩)。CREATE VIEW IS_S1(Sno,Sname,Grade)AS SELECT Student.Sno,Sname,GradeFROM Student,SCWHERE Sdept= 'IS' ANDStudent.Sno=SC.Sno ANDSC.Cno= '1';
8.2删除视图
语句的格式: DROP VIEW <视图名>[CASCADE];
8.3查询视图 用户角度:查询视图与查询基本表相同
8.4更新视图 允许对行列子集视图进行更新
8.5视图的作用:
①视图能够简化用户的操作
②视图能多种角度看待数据
③视图对重构数据库提供了一定程度的逻辑独立性 数据库重构 :
④视图能够对机密数据提供安全保护
⑤适当的利用视图可以更清晰的表达查询
小结:SQL可以分为数据定义、数据查询、数据更新、数据控制四大部分
四.数据库安全性
1. 计算机安全性概述
数据库的安全性:是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
保护计算机系统中的硬件、软件及数据
1.1不安全因素:
①恶意存取和破坏
②敏感数据被泄露
③安全环境脆弱性
1.2 TECT(桔皮书) TCSEC/TDI(紫皮书),从四个方面来描述安全性级别划分的指标
- 安全策略
- 责任
- 保证
- 文档
2. 数据库安全性控制
数据库安全性控制的常用方法
- 用户标识和鉴定
- 存取控制
- 视图
- 审计
- 密码存储
2.1常用的存取控制方法
自主存取控制(DAC) C2级 灵活
强制存取控制( MAC) B1级 严格
2.2授权与回收
授权:GRANT
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION]; 允不允许再授权
ALL PRIVILEGES 所有权限
PUBLIC 所有用户
[例] 把查询Student表和修改学生学号的权限授给所有用户,并允许他再将此权限授予其他用户
GRANT UPDATE(Sno), SELECT ON TABLE Student TO PUBLIC; WITH GRANT OPTION;
收回:REVOKE
REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;
[例] 把用户U5对SC表的INSERT权限收回REVOKE INSERT ON TABLE SC FROM U5 CASCADE ;
2.3创建数据库模式的权限
CREATE USER <username> WITH][DBA | RESOURCE | CONNECT]
新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA
2.4数据库角色:被命名的一组与数据库操作相关的权限
1.角色创建
CREATE ROLE <角色名>
2.给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
3.将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
WITH ADMIN OPTION]
4.、角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
5.删除角色
Drop role R1;
2.5强制存取控制方法
强制存取控制(MAC):是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
主体是系统中的活动实体
客体是系统中的被动实体,是受主体操纵的 (文件 基本表 索引 视图)
2.6视图机制
建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
先建立计算机系学生的视图CS_StudentCREATE VIEW CS_StudentAS SELECT *FROM StudentWHERE Sdept='CS'; 在视图上进一步定义存取权限GRANT SELECT ON CS_Student TO 王平 ;GRANT ALL PRIVILEGESON CS_Student TO 张明;
2.7审计
审计日志(Audit Log) 将用户对数据库的所有操作记录在上面
审计分为 :用户级审计和系统级审计
AUDIT语句:设置审计功能 NOAUDIT语句:取消审计功能
2.8数据加密
数据加密是:将原始数据(明文)变换为不可直接识别的格式(密文)
加密方法: 存储加密 传输加密
2.9统计数据库
隐蔽信道 处理强制存取控制未解决的问题
统计数据库: 允许用户查询聚集类型的信息(如合计、平均值等)
不允许查询单个记录信息
小结:
实现数据库系统安全性的技术和方法
- 用户身份鉴别
- 存取控制技术:DAC & MAC.
- 视图技术
- 审计技术
- 数据加密存储和加密传输
自主存取控制功能
通过SQL 的GRANT语句和REVOKE语句实现
角色
- 使用角色来管理数据库权限可以简化授权过程
- CREATE ROLE语句创建角色
- GRANT 语句给角色授权
五.数据库的完整性
1.数据库的完整性:
1.1数据库的完整性 :指数据的正确性 和 数据的相容性,防止数据库中存在不符合语义,保护数据库 防止恶意的破坏和非法的存取
为维护数据库的完整性,数据库管理系统必须:
1.提供定义完整性约束条件的机制
2.提供完整性检查的方法(一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查)
3.违约处理(拒绝(NO ACTION)执行该操作 极连(CASCADE)执行其他操作)
1.2关系模型的实体完整性 CREATE TABLE中用PRIMARY KEY定义
[例] 将SC表中的Sno,Cno属性组定义为码CREATE TABLE SC( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT,PRIMARY KEY (Sno,Cno) /*只能在表级定义主码*/);
实体完整性检查和违约处理
插入或对主码列进行更新操作时,关系数据库管理系统按照实体完整性规则自动进行检查。包括:
- 检查主码值是否唯一,如果不唯一则拒绝插入或修改
- 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
1.3 参照完整性
关系模型的参照完整性定义 在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
[例]定义SC中的参照完整性CREATE TABLE SC( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT,PRIMARY KEY (Sno, Cno), /*在表级定义实体完整性*/FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表级定义参照完整性*/FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表级定义参照完整性*/);
参照完整性违约处理:
(1) 拒绝(NO ACTION)执行
不允许该操作执行。该策略一般设置为默认策略
(2) 级联(CASCADE)操作
当删除或修改被参照表(Student)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组
(3)设置为空值(SET-NULL)
当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
1.4用户定义的完整性
属性上定义:
CREATE TABLE时定义属性上的约束条件
- 列值非空(NOT NULL)
- 列值唯一(UNIQUE)
- 检查列值是否满足一个条件表达式(CHECK)
[例] Student表的Ssex只允许取“男”或“女”。CREATE TABLE Student( Sno CHAR(9) PRIMARY KEY,Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (‘男’,’女’)), /*性别属性Ssex只允许取'男'或'女' */Sage SMALLINT,Sdept CHAR(20));
1.5断言
创建断言的语句格式
CREATE ASSERTION<断言名><CHECK 子句> 每个断言都被赋予一个名字,<CHECK 子句>中的约束条件与WHERE子句的条件表达式类似。
删除断言的语句格式为 DROP ASSERTION <断言名>;
1.6触发器
(触发器又叫做事件-条件-动作(event-condition-action)规则。)
CREATE TRIGGER语法格式CREATE TRIGGER <触发器名> {BEFORE | AFTER} <触发事件> ON <表名> REFERENCING NEW|OLD ROW AS<变量> FOR EACH {ROW | STATEMENT} [WHEN <触发条件>]<触发动作体>
1.定义触发器的语法说明
(1)表的拥有者才可以在表上创建触发器
(2)触发器名 触发器名可以包含模式名,也可以不包含模式名 同一模式下,触发器名必须是唯一的 触发器名和表名必须在同一模式下
(3)表名 触发器只能定义在基本表上,不能定义在视图上 当基本表的数据发生变化时,将激活定义在该表上相应触 发事件的触发器
4)触发事件 触发事件可以是(INSERT、DELETE或UPDATE )也可以是这几个事件的组合 还可以UPDATE OF<触发列,...>,即进一步指明修改哪些列时激活触发器
AFTER/BEFORE是触发的时机:
- AFTER表示在触发事件的操作执行之后激活触发器
- BEFORE表示在触发事件的操作执行之前激活触发器
(5)触发器类型
行级触发器(FOR EACH ROW) 语句级触发器(FOR EACH STATEMENT)
(6)触发条件
触发器被激活时,只有当触发条件为真时触发动作体才执行;否则触发动作体不执行。
如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行
(7)触发动作体
触发动作体可以是一个匿名PL/SQL过程块
[例] 当对表SC的Grade属性进行修改时,若分数增加了10%则将此次操作记录到下面表中:
SC_U(Sno,Cno,Oldgrade,Newgrade)其中Oldgrade是修改前的分数,Newgrade是修改后的分数。
CREATE TRIGGER SC_T AFTER UPDATE OF Grade ON SC REFERENCINGOLD row AS OldTuple,NEW row AS NewTuple FOR EACH ROW WHEN (NewTuple.Grade >= 1.1*OldTuple.Grade)INSERT INTO SC_U(Sno,Cno,OldGrade,NewGrade) VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)
[例] 将每次对表Student的插入操作所增加的学生个数记录到表StudentInsertLog中。
CREATE TRIGGER Student_Count AFTER INSERT ON Student /*指明触发器激活的时间是在执行INSERT后*/ REFERENCINGNEW TABLE AS DELTA FOR EACH STATEMENT /*语句级触发器, 即执行完INSERT语句后下面的触发动作体才执行一次*/ INSERT INTO StudentInsertLog (Numbers) SELECT COUNT(*) FROM DELTA
[例] 定义一个BEFORE行级触发器,为教师表Teacher定义完整性规则“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”。
CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher /*触发事件是插入或更新操作*/ FOR EACH ROW /*行级触发器*/ BEGIN /*定义触发动作体,是PL/SQL过程块*/ IF (new.Job='教授') AND (new.Sal < 4000) THEN new.Sal :=4000; END IF;END;
2.激活触发器 :
一个数据表上可能定义了多个触发器,遵循如下的执行顺序:
(1) 执行该表上的BEFORE触发器;(多个时按谁先创建谁先执行)
(2) 激活触发器的SQL语句;
(3) 执行该表上的AFTER触发器。
3.删除触发器
删除触发器的SQL语法: DROP TRIGGER <触发器名> ON <表名>;
【例题】 问题: 解决上述的银行取款问题:当向交易信息表(transInfo)中插入一条交易信息时,我们应自动更新对应帐户的余额。
分析:
- 在交易信息表上创建INSERT触发器
- 从inserted临时表中获取插入的数据行
- 根据交易类型(transType)字段的值是存入/支取,
- 增加/减少对应帐户的余额。
-------关键代码------ CREATE TRIGGER trig_transInfo ON transInfo FOR INSERT ASDECLARE @type char(4), @outMoney MONEYDECLARE @myCardID char(10), @balance MONEYSELECT @type=transType, @outMoney=transMoney,@myCardID=cardID FROM insertedIF (@type='支取') UPDATE bank SET currentMoney=currentMoney-@outMoney WHERE cardID=@myCardIDELSEUPDATE bank SET currentMoney=currentMoney+@outMoneyWHERE cardID=@myCardID….. GO /*--插入测试数据:张三取钱,李四存钱---*/ DELETE FROM transInfo --删除历史数据 SET NOCOUNT ON --不显示T-SQL语句影响的记录行数 INSERT INTO transInfo(cardID,transType,transMoney) VALUES('1001 0001','支取',200) INSERT INTO transInfo(cardID,transType,transMoney) VALUES('1001 0002','存入',50000) --查看结果 SELECT * FROM bank SELECT * FROM transInfo
下接数据库系统概论(第5版)王珊 详细知识清单 期末复习速成 考前冲刺 面试——(第二篇 设计与系统篇)_字母符号数字的博客-CSDN博客
数据库系统概论(第5版)王珊 详细知识清单 期末复习速成 考前冲刺 面试——(第一篇 基础篇)相关推荐
- 数据库系统概论(第五版 王珊 萨师煊 编著)
数据库系统概论知识点总结 学习目录 基础篇 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统的结构 1.4 数据库系统的组成 1.5 小结 第二章 关系数据库 第三章 关系数 ...
- 数据库系统概论(第五版) 王珊 第六章课后习题答案
1 .理解并给出下列术语的定义: 函数依赖.部分函数依赖.完全函数依赖.传递依赖.候选码.主码.外码.全码(All 一key ).1 NF .ZNF .3NF .BcNF .多值依赖.4NF . 定义 ...
- 数据库系统概论(第五版) 王珊 第三章课后习题答案
1 .试述 sQL 语言的特点. 答: (l)综合统一. sQL 语言集数据定义语言 DDL .数据操纵语言 DML .数据控制语言 DCL 的功能于一体. (2)高度非过程化.用 sQL 语言进行数 ...
- 数据库系统概论(第五版) 王珊 第二章课后习题答案
1 .试述关系模型的三个组成部分. 答:关系模型由关系数据结构.关系操作集合和关系完整性约束三部分组成. 2 .试述关系数据语言的特点和分类. 答:关系数据语言可以分为三类: 关系代数语言. 关系演算 ...
- 数据库系统概论(第5版)学习笔记 第0章——走进数据库系统
数据库系统概论(第5版)笔记 第0章--走进数据库系统 走进数据库系统 数据库系统概论(第5版)笔记 第0章--走进数据库系统 0.为什么要学它? 1.数据库系统的发展经历了三代演变 2.造就了四位图 ...
- 数据库系统概论(第5版)学习笔记第1章 1.2——数据模型
数据库系统概论(第5版)学习笔记第1章 1.2--数据模型 目录 数据库系统概论(第5版)学习笔记第1章 1.2--数据模型 0.思维导图(自制) 1️⃣思维导图下载 2️⃣图示 1.2数据模型 1. ...
- 数据库系统概论第五版知识大纲
数据库系统概论第五版知识大纲 第1章 绪论 1.1 数据库系统概述 基本概念 数据:描述事物的符号记录 数据库:数据库是长期储存在计算机内.有组织的.可共享的大量数据的集合 数据库系统:数据库系统是由 ...
- 《数据库系统概论(第五版)》学习资料
<数据库系统概论(第五版)>学习资料 一.第一章 1.数据:描述事物的符号记录 2.数据库:长期储存在计算机内.有组织.可共享的大量数据集合. (数据库中的数据按一定的数据模型组织.描述和 ...
- 数据库系统概论第五版第二章习题6
(SPJ数据库查询操作) 数据库系统概论第五版第二章习题6(SPJ数据库查询操作)_FunPony的博客-CSDN博客
- 数据库系统概论第五版课后习题
数据库系统概论第五版课后习题
最新文章
- 类、抽象类、接口之间的区别
- 常见的 OOM 原因及其解决方法(OutOfMemoryError)
- 字符串转Unicode码
- java高级编程期末考试题_java高级编程考题
- Linux上的JAVA的IDE,在linux上运行的基于文本的强大java IDE
- 字符串大写转小写库函数_PHP程序无需使用库函数即可将字符串转换为大写
- Oracle数据库应用系统结构
- android大作业计算器,2015大作业简易计算器实验报告.doc
- 字体属性html语言,html字体属性face
- 弹性系数和线径的计算公式_压缩弹簧弹力的计算公式
- 抖音短视频矩阵系统源代码开发
- 什么是用户实体行为分析(UEBA)
- Java微信支付API文档测试
- oracle 索引快速全扫描,使用目录快速全扫描(Index FFS)避免全表扫描的若干场景
- 实现OCR语言识别Demo(一)- BottomSheet实现
- 程序人生—我已经努力了七年
- 我是如何通过系统架构设计师考试的(2017年软考)-转载
- 初中生用计算机作弊,初中生“考试作弊”惯用的3个手段,全中是学渣,学霸:长见识了...
- 常用缓存读写策略(cache读写策略)
- 勒索病毒未死,新病毒或又要来袭
热门文章
- 29、NeRV: Neural Reflectance and Visibility Fields for Relighting and View Synthesis
- 基于java+springboot+mysql的中小型超市进销存管理系统
- 2021-08-01 半夜睡不着系列之光纤接口类型
- 《代码大全》读书笔记
- 企业要如何利用360评估法做好人才盘点?
- 无法重命名,文件不可信,后台被自动关闭,“Notebook Untitled.ipynb is not trusted jupyter”
- 计算机应用基础——计算机硬件(三)
- FileChannel阅读笔记
- 如何禁用win10的水果输入法
- 这家协同办公软件厂商,也曾如盛夏莲花般绽放