第一章 数据库系统概述
一、名称解释
数据:是指所有能输入到计算机并能被计算机程序处理的符号介质总称,是用于输入计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的统称。
信息:是经过加工处理并对人类社会实践和生产活动产生决策影响的数据。 DB:是长期存储在计算机内、有组织的、统一管理的相关数据的集合。
DBMS:是位于用户与0S之间的一层数据管理软件,它为用户或应用程序提供访问DB的方法,包括数据库的建立、查询、更新及各种数据控制。
DBS:是指在计算机系统中引入数据库后的系统,一般由硬件、数据库、操作系统、DBMS、数据库开发工具、数据库应用系统和人员构成。
数据字典(DD):Data Dictionary,数据库系统中存放三级结构定义的数据库,是系统中各类数据描述的集合。
外模式:又称子模式或用户模式,是用户能够看到和使用的局部数据逻辑结构和特征的描述。 模式:又称概念模式或逻辑模式,是数据库中全部数据的逻辑结构和特征的描述。 内模式:DB在物理存储方面的描述。
概念模型:也称信息模型,是对现实世界的认识和抽象的描述,按用户的观点对数据和信息进行建模,不考虑在计算机的DBMS中如何具体实现(不涉及信息在计算机中如何表示)。是对客户事物及其联系的一种抽象描述。
实体:客观存在、可以相互区别的事物称为实体。 属性:实体有很多特性,每一个特性称为一个属性。
实体标识符:能惟一标识实体的属性或属性集,称为实体标识符。 数据模型(逻辑数据模型):能表示实体类型及实体间联系的模型,是对现实世界的第二层抽象,它与DBMS有关,直接面向数据库的逻辑结构。 物理模型:是描述数据在物理存储介质上的存储结构和存储方法,与具体的DBMS、操作系统及硬件有关。
二、填空
数据管理发展的三个阶段:人工管理阶段、文件管理阶段、数据库管理阶段。 数据库中存储数据是集成的和共享的。
数据库的保护功能:数据库恢复、数据库的并发控制、数据完整性控制、数据安全性控制。 数据库系统中的人员主要有:数据库管理员DBA、系统分析员、数据库设计人员、应用程序员和终端用户。 数据库中数据的独立性分为逻辑独立性和物理独立性。 数据库的三级结构是指外模式、模式、内模式。
一个数据库只有一个内模式,只一个模式,可以有多个外模式。
数据处理要经过现实世界、概念世界和数据世界三个阶段,两级抽象。 概念模型最常用的表达方法是美籍华人陈平山于1976年提出的E-R图。 数据库发展至今,常见的数据模型有:层次、网状、关系和面向对象。 层次模型对于一对多联系表达非常自然直观,是其突出优点。
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个方面。 客观存在、可以相互区别的事物称为实体。
在ER图中,属性用椭圆表示,实体用矩形表示,联系用菱形表示。
数据库的保护功能通过数据库恢复、并发控制、完整性控制、安全性控制等四个子系统实现。
数据库系统DBS一般由硬件、数据库、操作系统、DBMS、数据库开发工具、数据库应用系统和人员构成。 两个实体之间的联系有三种类型。在一个选课系统中,学生与课程之间属于多对多(M:N)联系。
三、简答
1.数据与信息的关系?
数据是指所有能输入到计算机并能被计算机程序处理的符号介质总称,是用于输入计算机进行处理,具有
一定意义的数字、字母、符号和模拟量等的统称。信息是经过加工处理并对人类社会实践和生产活动产生决策影响的数据。数据是信息的符号表示或称为载体;信息则是数据的内涵,是对数据语义的解释。
2.人工管理阶段数据管理技术的特点? ①数据不保存,也无须长期保存。 ②没有专用的软件对数据进行管理。
③只有程序(program)的概念,没有文件(file)的概念。数据的组织方式必须由程序员自行设计与安排。 ④数据不能共享。
⑤数据和程序是一个整体,数据无独立性。 数据面向程序。即一组数据对应一个程序。 3.文件系统阶段的数据管理技术的特点?
①数据以“文件”形式可长期保存在外部存储器的磁盘上。 ②数据的逻辑结构与物理结构有了区别,但比较简单。
③文件组织已多样化。有索引文件、链接文件和直接存取文件等。 ④数据不再属于某个特定的程序,可以重复使用,即数据面向应用。 ⑤对数据的操作以记录为单位。
4. 文件系统阶段的数据管理有些什么缺陷?试举例说明。 主要有3个缺陷:数据冗余;数据不一致性;数据联系弱。
例如学校里教务处、财务处、保健处建立的文件中都有学生详细资料,如联系电话,家庭住址等。这就是“数据”冗余;如果某个学生搬家,就要修改3个部门文件中的数据,否则会引起同一数据在3个部门中不一致;产生上述问题的原因是这3个部门的文件中数据没有联系。 5.数据库阶段的数据管理有哪些特色?
①采用数据模型可以表示复杂的数据结构;
②有较高的数据共享性和独立性,数据具有完整性、一致性和安全性,有效减少了数据冗余; ③利用DBMS实现数据的定义、操作、统一管理和控制,为用户提供了方便的用户接口;
④提供了4个方面的数据控制功能:数据库的并发控制,数据库的恢复,数据的完整性和数据安全性; ⑤对数据的操作以数据项为单位,增加了系统的灵活性。 6.DBMS的主要功能包括哪几个方面?
数据库的定义功能:定义语言DDL来定义数据库的三级结构、两级映象,定义数据的完整性约束、保密限制等约束。
数据库的操纵功能:操纵语言DML实现对数据的基本操作,数据查询和数据更新。
数据库的保护功能:数据库恢复、数据库的并发控制、数据完整性控制、数据安全性控制。 数据库的维护功能:数据库的数据载入、转换、转储、数据库的改组以及性能监控工能。 数据字典(DD):对数据库的操作都要通过DD才能实现,DD还存放数据库运行时的统计信息。 7.数据库系统中数据库管理员DBA的主要职责是什么? ①决定数据库中的信息内容和结构 ②决定数据库的存储结构和存取策略
③定义数据的安全性要求和完整性约束条件 ④监控数据库的使用和运行 ⑤数据库的改进、重组或重构
8. 简述数据库系统的两级映像和数据独立性之间的关系。(什么叫数据独立性,两级独立性的具体涵义。) 答:为了能够在系统内部实现数据库的3个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层映像:
外模式/模式映像。当模式改变时(如增加新的关系、新的属性等),只需管理员对该映像做相应修改,就可以使外模式保持不变,如果应用程序是依据外模式编写的,则应用程序可以不必修改,保证了数据与程
序的逻辑独立性,简称数据的逻辑独立性。
模式/内模式映像。此映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系,当数据库的存储结构发生改变时,只需要管理员对该映像做相应修改,就可以使模式保持不变,从而应用程序也不必修改,保证了数据与程序的物理独立性,简称数据的物理独立性。 9.实体之间联系有哪几种?分别举例说明?
1:1联系:如果实体集El中每个实体至多和实体集E2中的一个实体有联习,反之亦然,那么El和E2的联系称为“l:1联系”。例如:班级与班长之间的联系。
1:N联系:如果实体集El中每个实体可以与实体集E2中任意个(零个或多个)实体有联系,而E2中每个实体至多和El中一个实体有联系,那么El和E2的联系是“1:N联系”。 例如:部门和职工两个实体集之间的联系。
M:N联系:如果实体集El中每个实体可以与实体集E2中任意个(零个或多个)实体有联系,反之亦然,那么El和E2的联系称为“M:N联系”。例如:学生与课程两个实体集之间的联系。
综合题
10.设某商业集团数据库中有三个实体集。一是“商店”实体集,属性有商店编号、商店名、地址等;二是“商品”实体集,属性有商品号、商品名、规格、单价等;三是“职工”实体集,属性有职工编号、姓名、性别、业绩等。
商店与商品间存在“销售”联系,每个商店可销售多种商品,每种商品也可放在多个商店销售,每个商店销售每一种商品,有月销售量;商店与职工间存在着“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。
试画出ER图,并在图上注明属性、联系的类型。再转换成关系模式集,并指出每个关系模式的主键和外键。
解:ER图如下图所示。 商品号 商品名 规格 单价 商品 M
月销售量 销售
商店编号 N
商店 商店名
1 聘期 地址 聘用 月薪 N
职工
职工编号 姓名 性别 业绩
所转换成的关系:
商品(商品号,商品名,规格,单价) 商店(商店编号,商店名,地址)
销售(商店编号,商品号,月销售量)
职工(职工编号,姓名,性别,业绩,聘期,月薪,商店编号)
11.设某商业集团数据库中有三个实体集。一是“公司”实体集,属性有公司编号、公司名、地址等;二是“仓库”实体集,属性有仓库编号、仓库名、地址等;三是“职工”实体集,属性有职工编号、姓名、性别等。
公司与仓库间存在“隶属”联系,每个公司管辖若干仓库,每个仓库只能属于一个公司管辖;
仓库与职工间存在“聘用”联系,每个仓库可聘用多个职工,每个职工只能在一个仓库工作,仓库聘用职工有聘期和工资。
试画出E-R图,并在图上注明属性、联系的类型。再转换成关系模式集,并指出每个关系模式的主键和外键。
解:ER图及属性、联系图如下:
公司编号 公司名 地址
公司
1
隶属 仓库编号 N
仓库 仓库名 1 聘期 地址
聘用
工资 N
职工
职工编号 姓名 性别
将ER图转换成为关系模式集为: 公司(公司编号,公司名,地址)
仓库(仓库编号,仓库名,地址,公司编号)
职工(职工编号,姓名,性别,仓库编号,聘期,工资)
12.设某商业集团数据库中有三个实体集。一是“商品”实体集,属性有商品号、商品名、规格、单价等;二是“商店”实体集,属性有商店号、商店名、地址等;三是“供应商”实体集,属性有供应商编号、供应商名、地址等。
供应商与商品间存在“供应”联系,每个供应商可供应多种商品,每种商品可向多个供应商订购,供应商供应每种商品有月供应量;商店与商品间存在“销售”联系,每个商店可销售多种商品,每种商品可在多个商店销售,商店销售商品有月计划数。
试画出E-R图,并在图上注明属性、联系的类型。再转换成关系模式集,并指出每个关系模式的主键和外键。
解:ER图及属性、联系图为:
商品号 商品名 规格
商品 N N
月供应量
供应
M
供应商
供应商编号 供应商名 地址 商店号
这个ER图转换的关系模式如下:
商品(商品号,商品名,规格,单价) 供应商(供应商编号,供应商名,地址) 商店(商店号,商店名,地址)
供应(商品号,供应商编号,月供应量)
单价 月计划数 销售 M 商店 商店名 地址 销售(商品号,商店号,月计划数)
13.假设要为银行的储蓄业务设计一个数据库,其中涉及到储户、存款、取款等信息,试设计E-R模型。
解:储蓄业务主要是存款、取款业务,设计的ER图如下所示。
账号 身份证号 姓名 地址 存款余额
储户
1 1
存款日期 取款日期
存款 取款 N N 存款单 取款单
存款单号 存款方式 金额 取款单号 取款方式 金额
14.假设某超市公司要设计一个数据库系统来管理该公司的业务信息。该超市公司的业务管理规则如下:
(1) 该超市公司有若干仓库,若干连锁商店,供应若干商品。
(2) 每个商店有一个经理和若干收银员,每个收银员只在一个商店工作。 (3) 每个商店销售多种商品,每种商品可在不同的商店销售。
(4) 每个商品编号只有一个商品名称,但不同的商品编号可以有相同的商品名称。每种商品可以有多种销售价格。
(5) 超市公司的业务员负责商品的进货业务。 试按上述规则设计E-R模型。 解: 仓库 N M M M P 业务员 进货 库存 商店 发货 N 1 1 N P N 销售 商品 M 拥有 主管 1 具有 1 N N 收银员 经理 销售价格 15.假设要根据某大学的系、学生、班级、学会等信息建立一个数据库。一个系有若干专业,每个专业每年只招一个班,每个班有若干学生;一个系的学生住在同一宿舍区;每个学生可以参加多个学会,每个学会有若干学生,学生参加某学会有入会年份。试为该大学的系、学生、班级、学会等信息设计一个E-R模型。
解:下图所示的是一种设计方案。
专业 N 1
设置 招收
1 N
系 班级
N 1
住宿 有
1 N 宿舍区 学生
M
参加
N 学会
第二章 关系数据库基本理论
一、名称解释
超键:在一个关系中,能惟一标识元组的属性或属性集称为关系的超键。
候选键:如果一个属性集能惟一标识元组,且又不含有多余的属性,那么这个属性集称为关系的候选键。 主键:若一个关系中有多个候选键,则选其中的一个为关系的主键。
外键:若一个关系R中包含有另一个关系S的主键所对应的属性组F,则称F为R的外键。并称关系S为参照关系,关系R为依赖关系。
实体完整性规则:实体的主键值不允许是空值或重复的值。
参照完整性规则:依赖关系中的外键值或者为空值,或者是相应参照关系中某个主键值。
笛卡尔积:n元关系R和m元关系S的笛卡尔积记为R×S,其结果是一个n+m列元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若关系R和S分别有r和s个元组,则R×S有r*S个元组。
连接:是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
函数依赖:设有关系模式R(U),X和Y是属性集U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖(Functional Dependency,简记为FD)于X,记作X→Y。
非平凡的函数依赖:在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但Y ?\\ X,则称X→Y是非平凡的函数依赖。若X→Y,且Y ? X, 则称X→Y是平凡的函数依赖
完全函数依赖(部分函数依赖):假设在关系模式R(U)中,X和Y是属性集U的子集,且有X→Y,如果对于X的任一个真子集W,都有W→Y不成立,则称Y完全函数依赖于X,否则,称Y部分函数依赖于X。
传递函数依赖:假设在关系模式R(U)中,X 、Y和Z是属性集U的不同子集,如果X→Y(并且Y→X不成立),Y→Z,则称Z传递函数依赖X,或称X传递函数确定Z。
1NF:如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是1NF的模式。
2NF:如果关系模式R属于1NF,且它的每一个非主属性都完全函数依赖于R的候选键,则称R属于第二范式,简记为R∈2NF。
3NF:如果关系模式R属于1NF,且每个非主属性都不传递依赖于R的候选键,那么称R属于第三范式,简记为R∈3NF。
BCNF:若关系模式R∈3NF,并且每一个主属性都不部分依赖,也不传递依赖于R的每个不包含它的候选码,则R∈BCNF。
无损分解:当对关系模式R进行分解时,R的元组将分别在相应属性集进行投影而产生新的关系。如果对新的关系进行自然连接得到的元组集合与原关系完全一致,则称该分解为无损分解。
保持函数依赖的分解:当对关系模式R进行分解时,R的函数依赖集也按相应的模式进行分解。如果分解后总的函数依赖集合与原来关系R的函数依赖集合对于Armstrong推理保持一致,则称该分解为保持函数依赖分解(preserve dependency decompose)。
二、填空
一个关系就是一张规范的(二维)表格。
关系模式是由一个关系名和它的所有属性构成,一般表示为关系名(属性1,属性2,?,属性n)。
关系代数中传统的集合运算包括:并、交、差、笛卡尔积;专门的关系运算包括:选择、投影、连接和除。 SQL是介于关系代数和关系演算之间的结构化查询语言。SQL具有丰富的查询功能、数据定义和数据控制功能,是集查询、DDL、DML、DCL于一体的关系数据语言。 SQL是一种高度非过程化的语言。
关系的完整性约束包括:域的完整性约束、实体完整性约束和参照完整性约束。
关系模式设计的不好,容易出现插入异常、删除异常、更新异常,数据冗余等四个问题,解决它的方法是
分解。
规范化理论用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
规范化可以在任何一步停下来,并不是规范化程度(即范式)越高越好。 Armstrong公理系统最基本的三个推理规则是:自反律、增广律、传递律。
三、简答题
1.关系的基本特点
⑴ 关系(表)可以看成是由行和列交叉组成的二维表格。它表示的是一个实体集合。 ⑵ 表中一行称为一个元组,可用来表示实体集中的一个实体。
⑶ 表中的列称为属性,给每一列起一个名称即属性名,表中的属性名不能相同,属性值是原子的,不可分解。
⑷理论上没有列序,列的取值范围称为域,同列具有相同的域,不同的列可有相同的域。
⑸表中任意两行(元组)不能相同。能惟一标识表中不同行的属性或属性组称为主键。没有行序。 2.什么叫外键?请举例说明。
若一个关系R中包含有另一个关系S的主键所对应的属性组F,则称F为R的外键。 例如,学生关系和系部关系分别为:
学生(SNO,SNAME,SEX,AGE,SDNO) 系部(SDNO,SDNAME,CHAIR) 学生关系的主键是SNO,系部关系的主键为SDNO,在学生关系中,SDNO是它的外键。更确切地说,SDNO是系部表的主键,将它作为外键放在学生表中,实现两个表之间的联系。 3.举例说明什么叫参照完整性。
关系中的外键值或者为空值,或者是相应参照关系中某个主键值。
如下所示,在学生S与专业P两个关系之间存在着属性引用,关系S引用了关系P的主码PNO。 S(SNO,SNAME,AGE,SEX,PNO) P (PNO, PNAME)
S关系中PNO的取值要参照关系P中PNO的取值。如果关系S中的属性PNO取空值,说明该学生尚没分配专业。当对P中的记录进行删除或修改时,要注意保持S与P的一致性。 4.请举例说明在同一个关系内部也可能存在参照的完整性约束。 学生(学号,姓名,性别,年龄,班长学号),班长学号是外键,它的取值必须参照学号。
课程(课程号,课程名,学分,先行课课程号)先行课课程号是外键,它的取值必须参照课程号。 5. 设有关系R和S,如下图所示,请计算R∪S,R-S,R∩S
6.设有关系R和S,如下图所示,请计算R∪S,R-S,R∩S
7.设有关系R和S,如下图所示。
S R A B C A B C
3 6 7 3 4 5
2 5 7 7 2 3
7 2 3
4 4 3
图2.17 关系R和S
计算R∪S,R-S,R∩S,R×S,π3,2(S),σB<'5'(R),R S,R S。
2<2 答:
B C B C R∪S A R×S R.A R.B R.C S.A S.B S.C R-S A
3 6 7 3 6 7 3 4 5 3 6 7
2 5 7 3 6 7 7 2 3 2 5 7
7 2 3 2 5 7 3 4 5 4 4 3
4 4 3 2 5 7 7 2 3 B C R∩S A 3 4 5 7 2 3 3 4 5 7 2 3 7 2 3 7 2 3 π3,2(S) C B 4 4 3 3 4 5 σB<’5’(R) A B C
7 2 3 2 4 4 S R.A R.B R.C S.A S.B S.C R 2<2 7 2 3 3 4 5
5 4 3 3 4 4 3 7 2 3 R S A 7 B 2 C 3
8. 设有关系R和S,如下图所示,请计算一般连接(C 9.笛卡尔积、等值连接和自然连接三者之间有什么区别? 笛卡儿积是一个基本操作,而等值连接和自然连接是组合操作。 设关系R的元数为r,元组个数为m;关系S的元数为s。,元组个数为n。 那么,R×S的元数为r+s,元组个数为m×n; R S的元数也是r+s,但元组个数小于等于m×n; iθj R S的元数小于等于r+s,元组个数也小于等于m×n: 10. 设有关系R和S,如下图所示,请计算全外连接,左外连接,右外连接。 11.什么叫除,设有关系R和S,如下图所示,请计算R÷S 除法操作是用含有m个属性的关系R除以一个含有n个属性的关系S,运算结果是一个含有m-n个属性的新关系。记作:R÷S。关系R与关系S必须满足下列两个条件才能相除。关系R中的属性包含关系S中的全部属性。关系R中的某些属性不出现在S中。 12. 设有关系R和S,如下图所示,请计算R÷S 12. 设有关系R、S1、S2、S3,如下图所示,请计算R÷S1、R÷S2 、R÷S3 13. 设关系R(ABCDE)上函数依赖集为F,并且F={A→BC,CD→E,B→D,E→A}。求出R的候选键。 解:已知A→BC,由分解性得A→B,A→C;又已知B→D,由传递性得 A→D;又由合并性得 A→CD,又已知CD→E,再由传递性得 A→E,因此,A是R的一个候选键。 同理可得R的另外三个候选键E、CD和BC。 14.设关系模式R(ABCD),F是R上成立的FD集,F={A→B,C→B},则相对于F,试写出关系模式R的候选键。并说明理由。 解:R的关键码为ACD。因为从已知的F,A→B,只能推出ACD→ABCD。 15.简述Armstrong公理系统的推理规则A1-A7 A1(自反性,Reflexivity):若Y?X?U,则X→Y在R上成立。 A2(增广性,Augmentation):若X→Y在R上成立,且Z?U,则XZ→YZ在R上成立。 A3(传递性,Transitivity):若X→Y和Y→Z在R上成立,则X→Z在R上成立。 A4(合并性,Union):{ X→Y,X→Z }?X→YZ。 A5(分解性,Decomposition): { X→Y,Z?Y } ? X→Z 。 A6(伪传递性):{ X→Y,WY→Z }? WX→Z。 A7(复合性,Composition): { X→Y,W→Z } ? XW→YZ。 四、综合题 1. 设教学管理数据库中有三个关系 S(SNO,SNAME,AGE,SEX,SDEPT) SC(SNO,CNO,GRADE) C(CNO,CNAME,CDEPT,TNAME) 试用关系代数表达式表示下列查询语句: (1) 检索LIU老师所授课程的课程号、课程名。 (2) 检索年龄大于23岁的男学生的学号与姓名。 (3) 检索学号为S3学生所学课程的课程名与任课教师名。 (4) 检索至少选修LIU老师所授课程中一门课的女学生姓名。 (5) 检索WANG同学不学的课程的课程号。 (6) 检索至少选修两门课程的学生学号。 (7) 检索学习全部课程的学生姓名。 (8) 检索所学课程包含学生S3所学课程的学生学号。 解: ⑴ πCNO,CNAME(σTEACHER=’LIU’(C)) ⑵ πSNO,SNAME(σAGE>’23’∧SEX=’M’(SC)) ⑶ πCNAME,TEACHER(σSNO=’S3’(SC C)) ⑷ πSNAME(σSEX=’F’∧TEACHER=’LIU’(S SC C)) ⑸ πCNO(C)-πCNO(σSNAME=’WANG’(S SC)) ⑹ π1(σ1=4∧2≠5(SC×SC)) (7) πSNAME(S ? (πSno,Cno (SC) ÷πCno (C)) (8) πSno,Cno (SC) ÷ πCno(σSno=‘S3’(SC)) 2. 设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER) 用关系代数表达式表示查询语句。 (1) 检索学习课程号为C2的学生学号与成绩。 πS#,GRADE(σC#=‘C2’ (SC)) (2) 检索学习课程号为C2的学生的学号与姓名。 πS#,SNAME(σC#=‘C2’ (S ? SC)) (3) 检索选修课程名为MATHS的学生学号与姓名。 πS#,SNAME(σCNAME=‘MATHS’ (S ? SC ? C)) (4) 检索选修课程号为C2或C4的学生学号。 πS#(σC#=‘C2’ ∨C#=‘C4’(SC)) (5) 检索至少选修课程号为C2和C4的学生学号。 π1(σ1=4∧2=‘C2’ ∧5=‘C4’ (SC×SC)) (6)检索不学C2课的学生姓名与年龄。 πSNAME,AGE ( S)-πSNAME,AGE (σC#=‘C2’ (S ? SC)) 3.设关系模式R(ABCD),F是R上成立的FD集,F={AB→CD,A→D}。 (1) 试说明R不是2NF模式的理由。 (2) 试把R分解成2NF模式集。 答:⑴ 从已知的函数依赖集F,可知R的候选键是AB。另外,由AB→CD可推出AB→D,再由A→D可知AB→D是部分(局部)函数依赖,因此R不是2NF模式。 ⑵ 如果将R分解成{AD,ABC},则是2NF模式集。 4.设关系模式R(ABC),F是R上成立的FD集,F={C→B,B→A}。 ⑴ 试说明R不是3NF模式的理由。 ⑵ 试把R分解成3NF模式集。 答:⑴ 从已知函数依赖集F可知,R的候选键是C。由C→B,B→A可知,C→A是一个传递依赖,因此R不是3NF模式。 ⑵ 此时如果将R分解成ρ={CB,BA},则ρ是3NF模式集。 5.设有关系模式R(职工编号,日期,日营业额,部门名,部门经理),该模式统计商店里每个职工的日营业额,以及职工所在的部门和经理信息。如果规定:每个职工每天只有一个营业额;每个职工只在一个部门工作;每个部门只有一个经理。试回答下列问题: (1) 根据上述规定,写出模式R的基本FD和候选键。 (2) 说明R不是2NF的理由,并把R分解成2NF模式集。 (3) 进而分解成3NF模式集。 解: ⑴ 基本的FD有三个: (职工编号,日期)→ 日营业额 职工编号 → 部门名 部门名 → 部门经理 R的关键码为:(职工编号,日期)。 ⑵ R中有两个这样的FD: (职工编号,日期)→(部门名,部门经理) 职工编号 →(部门名,部门经理) 可见前一个FD是局部依赖,所以R不是2NF模式。 R应分解Rl(职工编号,部门名,部门经理) R2(职工编号,日期,日营业额) 此处,Rl和R2都是2NF模式。 ⑶ R2已是3NF模式。 在R1中,存在两个FD:职工编号 → 部门名 部门名 → 部门经理 因此,“职工编号 → 部门经理”是一个传递依赖,Rl不是3NF模式。 R1应分解成R11(职工编号,部门名) R12(部门名,部门经理) 这样,ρ={R11,Rl2,R2}是一个3NF模式集。 6.设有关系模式R(运动员编号,比赛项目,成绩,比赛类别,比赛主管),如果规定:每个运动员每参加一个比赛项目,只有一个成绩;每个比赛项目只属于一个比赛类别;每个比赛类别只有一个比赛主管。试回答下列问题: (1) 根据上述规定,写出模式R的基本FD和候选键。 (2) 说明R不是2NF的理由,并把R分解成2NF模式集。 (3) 进而分解成3NF模式集。 解:⑴ 基本的FD有3个: (运动员编号,比赛项目)→ 成绩 比赛项目 → 比赛类别 比赛类别 → 比赛主管 R的关键码为(运动员编号,比赛项目)。 ⑵ R有两个这样的FD: (运动员编号,比赛项目)→ (比赛类别,比赛主管) 比赛项目 → (比赛类别,比赛主管) 可见,前一个FD是部分(局部)函数依赖,所以R不是2NF模式。 如果把R分解成R1(比赛项目,比赛类别,比赛主管) R2(运动员编号,比赛项目,成绩) 这里,R1和R2都是2NF模式。 ⑶ R2已是3NF模式。 在R1中,存在两个FD:比赛项目 → 比赛类别 比赛类别 → 比赛主管 因此,“比赛项目 → 比赛主管”是一个传递依赖,R1不是3NF模式。 R1应分解为R11(比赛项目,比赛类别) R12(比赛类别,比赛主管) 这样,ρ={R11,R12,R2}是一个3NF模式集。 7.设关系模式R(ABC),F是R上成立的FD集,F={B→C,C→A},那么分解ρ={AB,AC}相对于F,是否无损分解和保持FD?并说明理由。 答:已知F={B→C,C→A},而πAB(F)={B→A},πAC(F)={C→A},显然这个分解丢失了FD:B→C。 对于保持无损分解: A B C A B C 由FD AB a1 a2 b13 AB a1 a2 b13 AC a1 b22 a3 AC a1 b22 a3 无a行,所以是有损分解。 ),F是R上成立的FD集,F={A→B ,B→C,A→D,D→C},ρ={AB,AC, 8.设关系模式R(ABCD BD}是R的一个分解。 ⑴ 相对于F,ρ是无损分解吗?为什么? ⑵ 试求F在ρ的每个模式上的投影。 ⑶ ρ保持F吗?为什么? 答: ⑴ 用测试过程可以知道,ρ相对于F是损失分解。 ⑵ πAB(F)={A→B},πAC(F)={A→C},πBD(F)=Ф。 ⑶ 显然,分解ρ相对于F不保持FD分解,因为丢失了B→C,A→D,D→C等三个FD。 9.设关系模式R(ABCD),R上的FD集F={A→C,D→C,BD→A},试说明ρ={AB, ACD,BCD}相对于F是损失分解的理由。 答:根据已知的F集,不可能把初始表格修改为一个全a行的表格,因此ρ相对于F是损失分解。 10.函数依赖集F的闭包F+:被F逻辑蕴涵的函数依赖全体构成的集合,称为F的闭包,记为F+。 11.最小依赖集:设F是属性集U上的FD集,Fmin是F的最小依赖集,那么Fmin应满足下列四个条件:++ (Fmin)=F;每个FD的右边都是单属性;Fmin中没有冗余的FD;每个FD的左边没有冗余的属性。 12.设F为属性集U上的一组函数依赖,X ?U, XF+ ={ A|X→A能由F 根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F 的属性闭包。 ? 引理4.2 设F为属性集U上的一组函数依赖,X,Y ? U,X→Y能由F 根据Armstrong公理导出的充分必要条件是Y ?XF+ ? 用途 将判定X→Y是否能由F根据Armstrong公理导出的问题转化为求出XF+ ,判定Y是否为XF+的子集的问题。 13.已知关系模式R,其中 U={A,B,C,D,E}; F={AB→C,B→D,C→E,EC→B,AC→B}。 求(AB)F+ 。 ()解:设X0=AB; ()(1)计算X1: 逐一的扫描F集合中各个函数依赖, 找左部为A,B或AB的函数依赖。得到两个: () AB→C,B→D。于是X1=AB∪CD=ABCD。 ()()(2)因为X0≠ X1 ,所以再找出左部为ABCD子集的那些函数依赖,又得到AB→C,B→D, C ()()→E,AC→B,于是X2=X1∪BCDE=ABCDE。 ()(3)因为X2=U,算法终止。所以(AB)F+ =ABCDE。 五、选择题 1.给定关系R(A1,A2,A3,A4)上的函数依赖集F={A1→A2,A3→A2,A2→A3,A2→A4},R的候选关键字为________。 A. A1 B. A1A3 C. A1A3A4 D. A1A2A3 首先我们按照上面的算法计算A1+ 。 result=A1, 由于A1→A2,A1∈result,所以result=result∪A2=A1A2 由于A2→A3,A2∈result,所以result=result∪A3=A1A2A3 由于A2→A4,A2∈result,所以result=result∪A3=A1A2A3A4 由于A3→A2,A3∈result,所以result=result∪A2=A1A2A3A4 通过计算我们看到,A1+ =result={A1A2A3A4},所以A1是R的超码,理所当然是R的候选关键字。此题选A 。 2.设关系模式R,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满足 () 。 A.具有无损连接性、保持函数依赖 B.不具有无损连接性、保持函数依赖 C.具有无损连接性、不保持函数依赖 D.不具有无损连接性、不保持函数依赖 先做无损链接的判断。R1∩R2={C},计算C+。 Result=C 由于C→D,C∈result,所以result=result∪D=CD 可见C是R2的超码,该分解是一个无损分解。 再做保持依赖的判断。 A→BC,BC→E, E→A都在R1上成立(也就是说每一个函数依赖左右两边的属性都在R1中),C→D在R2上成立,因此给分解是保持依赖的。 选A。 3.给定关系模式R,U={A, B, C, D, E},F={B→A,D→A,A→E,AC→B},其候选关键字为 (1) ,则分解ρ={R1(ABCE),R2(CD)}满足 (2) 。 (1) A.ABD B.ABE C.ACD D.CD (2)A.具有无损连接性、保持函数依赖 B.不具有无损连接性、保持函数依赖 C.具有无损连接性、不保持函数依赖 D.不具有无损连接性、不保持函数依赖 对于第一问,分别计算ABCD四个选项的闭包, (ABD)+ = { ABDE } (ABE)+ = { ABE } (ACD)+ = { ABCDE } (CD)+ = { ABCDE } 选D。 再看第二问。 先做无损链接的判断。R1∩R2={C},计算C+。 result=C 因此C既不是R1也不是R2的超码,该分解不具有无损分解性。 再做保持依赖的判断。 B→A,A→E,AC→B在R1上成立,D→A在R1和R2上都不成立,因此需做进一步判断。 由于B→A,A→E,AC→B都是被保持的(因为它们的元素都在R1中),因此我们要判断的是D→A是不是也被保持。 对于D→A应用算法二: result=D 对R1,result∩R1=ф(空集,找不到空集的符号,就用这个表示吧),t=ф,result=D 再对R2,result∩R2=D,D+ =ADE ,t=D+ ∩R2=D,result=D 一个循环后result未发生变化,因此最后result=D,并未包含A,所以D→A未被保持,该分解不是保持依赖的。 选D。 第四章 SQL SERVER 2008 基础 一、填空题 SQL SERVER 2008中提供了5个系统数据库,其中master数据库是核心,一旦被破坏系统将无法启动,tempdb是临时数据库,model是模板数据库。 要连接到服务器,SQL SERVER提供了windows和SQL Server两种身份认证方式。要想通过Internet远程连接,最好使用SQL Server身份认证。 SSMS是SQL SERVER一个集成的可视化管理工具,其全称是 SQL SERVER Management Studio。 T-SQL中,系统变量又称全局变量,通过名称前面使用两个“@”符号与局部变量进行区分。 T-SQL中,用户自定义的变量(局部变量)创建时使用DECLARE进行声明,命名是必须以 “@”符号开头。 T-SQL中,对变量赋值必须使用SELECT或SET语句来设定。 T-SQL中,向客户端返回一个用户自定义的信息,可使用PRINT语句。 T-SQL中,“--”用于单行注释,“/*???*/”用于程序中多行注释。 二、简答题 1.SQL SERVER的管理(暂停、停止和启动),系统提供了几种方式? (1)使用SSMS,选中注册服务器,右击,在弹出的快捷菜单中进行管理。 (2)使用配置管理器,在其服务列表中选中相应的服务,右击,在弹出的快捷菜单中进行管理。 (3)使用windows控制面板中的服务选项卡,在其服务列表中选中相应的服务,右击,在弹出的快捷菜单中进行管理。 (4)使用windows的NET命令。如net start Mssqlserver。 2.SQL语言的特点 (1) 高度非过程化。SQL语言进行数据操作只要提出“做什么”,具体怎么做则由系统找出一种合适的方 法自动完成。 (2) 面向集合的操作方式。SQL语句采用集合操作方式,就是说可以使用一条语句从一个或者多个表中查询出一组结果数据。 (3) 语法简单。SQL语言功能强大,但是语法极其简单。 (4) 是关系型数据库的标准语言。无论用户使用哪个公司的产品,SQL的基本语法都是一样的。 3. SQL语言的命令一般分哪三类,每类中有哪些基本语句? (1) 数据操纵语言DML。DML语句用于操纵数据库中的数据,包括4个基本语句:SELECT、INSERT、UPDATE、DELETE。 (2) 数据定义语言DDL。DDL用来建立数据库中各种数据对象(包括表、视图、索引、存储过程、触发器等),包括3个基本语句。CREATE、ALTER、DROP。 (3) 数据控制语言DCL。DCL用于授予或者收回访问数据库的某种权限和事务控制,包括4个基本语句。GRANT、 REVOKE、COMMIT、ROLLBACK。 4.简述T-SQL全局变量和局部变量的区别。 T-SQL程序中的变量分为全局变量和局部变量两类,全局变量是由SQL Server系统定义和使用的变量,也称为系统变量。它通过名称前面加两个“@”符号区别于局部变量。DBA和用户可以使用全局变量的值,但不能自己定义全局变量。 局部变量是用户自定义的变量,它的作用范围仅在程序内部。在程序中通常用来储存从表中查询到的数据,或当作程序执行过程中暂存变量使用。局部变量必须以符号“@”开头,而且必须先用DECLARE语句说明后才可使用。 5.给出下列T-SQL语句的运行结果。 DECLARE @d DATETIME SET @d='2013-8-26' SELECT @d+10,@d-10 解: 6.给出下列各T-SQL语句的运行结果。 (1) SELECT CHARINDEX('科学','计算机科学与技术专业') (2) SELECT ROUND(26.213+124.1869,2) (3) SELECT STR(234.5678,6,2) (4) SELECT '25+12='+cast(37 as nvarchar) 解: (1) 4 (2) 150.4000 (3) 234.57 (4) 25+12=37 第五章 数据库和数据表管理 一、填空题 在SQL Server中,数据库是由数据文件和事务日志文件组成的,一个数据库至少应包含一个数据文件和一个事务日志文件。 在SQL Server中主数据文件的扩展名是.mdf。 在SQL Server中辅助数据文件的扩展名是.ndf。 在SQL Server中日志文件的扩展名是.ldf。 在T-SQL中,用USE语句来完成不同数据库之间的切换。 二、名词解释 主数据文件:是数据库的起点,其中包含数据库的初始信息,记录数据库所拥有的文件指针。每个数据库有且仅有一个主数据文件,这是数据库必需的文件。主数据文件的扩展名是.mdf。 文件组:在SQL Server中允许用户将多个文件划分一个文件集合,这些文件可以在不同的磁盘上,并为这一集合命名,这就是文件组。 主文件组:是包含主要文件的文件组。所有系统表和没有明确分配给其他文件组的任何文件都被分配到主文件组中,一个数据库只有一个主文件组。 用户定义文件组:是用户首次创建数据库时,或修改数据库时自定义的,其目的是为了将数据存储进行合理的分配,以提高数据的读写效率。 默认文件组:每个数据库中均有一个文件组被指定为默认文件组。如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。在任何时候,只能将一个文件组指定为默认文件组。 三、简答题 1.在SQL Server中辅助数据文件的作用? 除主数据文件以外的所有其他数据文件都是辅助数据文件。它用来存储主数据文件未存储的所有其它数据和对象,它不是数据库必需的文件。当一个数据库需要存储的数据量很大(超过了Windows操作系统对单一文件大小的限制)时,可以用辅助数据文件来保存主数据文件无法存储的数据。辅助数据文件可以分散存储在不同的物理磁盘中,从而可以提高数据的读写效率。辅助数据文件扩展名为.ndf。 3.简述各种约束对表中数据的作用。 答: 主键约束能唯一地标识表中数据的每一行。 唯一性约束用来限制不受主键约束的列上的数据的唯一性。 CHECK约束用于限制输入一列或多列值的范围,从逻辑表达式判断数据的有效性。 默认值约束是在用户在插入新的数据行时,如果没有为该列指定数据,那么系统就将默认值赋给该列。 外键约束用于建立和加强两个表(主表和从表)的一列或多列数据之间的链接。 4.SQL Server 2008支持的数据完整性约束有哪几类?各有什么作用? 答: SQL Server 2008支持的数据完整性约束包括5种类型:主键(PRIMARY KEY)约束、唯一性(UNIQUE)约束、检查(CHECK)约束、默认值(DEFAULT)约束和外键(FOREIGN KEY)约束。 PRIMARY KEY约束能唯一地标识表中数据的每一行。 UNIQUE约束用来限制不受主键约束的列上的数据的唯一性。 CHECK约束用于限制输入一列或多列值的范围,从逻辑表达式判断数据的有效性。 DEFAULT约束是在用户在插入新的数据行时,如果没有为该列指定数据,那么系统就将默认值赋给该列。 FOREIGN KEY约束用于建立和加强两个表(主表和从表)的一列或多列数据之间的链接。 四、综合题 1.创建教学管理数据库,数据库的名称为“JXGL”。主数据文件逻辑名为“JXGL.mdf”,保存路径为“D:\\JXGLSYS\\DATA”,日志文件的逻辑名为“JXGL_log.ldf”,保存路径为“D:\\JXGLSYS\\Data_log”。主数据文件大小为3MB,文件大小不受限制,增长量为1MB;日志文件的初始大小为1MB,最大为20MB,增长比例为10%。 CREATE DATABASE JXGL ON PRIMARY (NAME=JXGL, FILENAME='D:\\JXGLSYS\\DATA\\JXGL.mdf', SIZE=3, FILEGROWTH=1 ) LOG ON (NAME=JXGL_log, FILENAME='D:\\JXGLSYS\\DATA\\JXGL_log.ldf', SIZE=1, MAXSIZE=20, FILEGROWTH=10% ) 2.为教学管理数据库JXGL增加容量,原来的数据库文件JXGL.mdf的初始分配空间为3MB(默认值),现在将增至到10MB。 ALTER DATABASE JXGL MODIFY FILE (NAME=JXGL, SIZE=10) GO 3.为数据库JXGL增加辅助数据文件JXGL_1.NDF,初始大小为5MB,最大长度为30MB,按照5%增长。 ALTER DATABASE JXGL ADD FILE (NAME=JXGL_1, FILENAME='D:\\JXGLSYS\\DATA\\JXGL_1.dnf', SIZE=5, MAXSIZE=30, FILEGROWTH=5% ) GO 4.删除数据库JXGL中的辅助数据文件JXGL_1.ndf。 ALTER DATABASE JXGL REMOVE FILE JXGL_1 GO 5.将已存在的数据库JXGL改名为GX_JXGL。 sp_renamedb 'JXGL', 'GX_JXGL' GO 6.删除更名后的数据库GX_JXGL。 DROP DATABASE GX_JXGL GO 7.在图书销售数据库中有表结构BOOK(BOOK_ID,BOOK_NAME,PRICR)和 AUTHOR(AUTHOR_NAME,BOOK_ID,ADDRESS),写出完成下列操作的T-SQL语句。 (1) 设置BOOK中BOOK_ID为主键; (2) 设置AUTHOR中BOOK_ID为外键; (3) 在表BOOK中插入数据(’1203’,’数据库系统与应用教程’,32.8) (4) 修改表BOOK中BOOK_ID为“1013”的PRICR,使之为原PRICR的0.75倍。 (5) 删除表AUTHOR中的AUTHOR_NAME为“王昌辉”的记录。 解: (1) USE EDUC GO ALTER TABLE BOOK ADD CONSTRAINT PK_BOOK_ID PRIMARY KEY CLUSTERED(BOOK_ID) GO (2) USE EDUC GO ALTER TABLE AUTHOR ADD CONSTRAINT FK_AUTHOR_BOOK FOREIGN KEY(BOOK_ID) REFERENCES BOOK(BOOK_ID) GO (3) USE EDUC GO INSERT into BOOK VALUES(’1203’,’数据库系统与应用教程’,32.8) GO (4) USE EDUC GO UPDATE BOOK SET PRICR=PRICR*0.75 WHERE BOOK_ID=’1013’ (5) USE EDUC GO DELETE AUTHOR WHERE AUTHOR_NAME=’王昌辉’ GO 8.创建教学管理数据库JXGL的表S(学生表)、C(课程表)和SC(课程选修表),结构如下所示: S(SNO,SNAME,AGE,SEX,SDEPT) SC(SNO,CNO,GRADE) C(CNO,CNAME,CDEPT,TNAME) USE JXGL GO CREATE TABLE S -- 下面的例子将创建表 S(SNO CHAR(9) NOT NULL -- 学号字段,非空约束 CONSTRAINT PK_SNO PRIMARY KEY CLUSTERED -- 主键约束 CHECK(SNO LIKE ’200915121[0-9][0-9]’), -- 检查约束 SNAME CHAR(8) NOT NULL, -- 姓名字段,非空约束 SEX CHAR(2) NULL, -- 性别字段 AGE SMALLINT NULL, -- 年龄字段 SDEPT VARCHAR(50) NULL -- 系别字段 ) GO USE JXGL GO CREATE TABLE C ( CNO CHAR(4) NOT NULL, -- 课程编号字段,非空约束 CNAME VARCHAR(50) NOT NULL, -- 课程名字段,非空约束 CDEPT VARCHAR(50) NULL, -- 成绩字段 TNAME CHAR(8), -- 教师姓名字段 PRIMARY KEY(CNO) -- 主键约束 ) GO USE JXGL GO CREATE TABLE SC(SNO CHAR(9) NOT NULL, -- 学号字段,非空约束 CNO CHAR(4) NOT NULL, -- 课程编号字段,非空约束 GRADE REAL NULL, -- 成绩字段 PRIMARY KEY(SNO,CNO), -- 主键约束 FOREIGN KEY(SNO) REFERENCES S(SNO) on delete no action on update cascade, -- 外键约束 FOREIGN KEY(CNO) REFERENCES C(CNO) on delete no action on update cascade -- 外键约束) GO 9.在学生表S中,将列SEX的原数据长度2改为1。 USE JXGL GO ALTER TABLE S ALTER COLUMN SEX CHAR(1) NULL GO 10.在学生表S中,将AGE列名改为BIRTHDAY,数据类型为DATE。 USE JXGL GO ALTER TABLE S DROP COLUMN AGE GO ALTER TABLE S ADD BIRTHDAY DATE GO 11. 删除学生表S中SNO列的主键约束 USE JXGL GO ALTER TABLE S DROP CONSTRAINT PK_SNO GO 12. 删除数据库JXGL内的学生表S。 USE JXGL GO DROP TABLE S GO 13. 在教学管理数据库JXGL中,向学生表S中插入记录(’S1’,’程晓晴’,’F’,21,’CS’)。 USE JXGL INSERT INTO S(SNO,SNAME,SEX,AGE,SDEPT) VALUES('S1','程晓晴','F',21,'CS') GO 或 USE JXGL INSERT INTO S VALUES('S1','程晓晴','F',21,'CS') GO 14.在教学管理数据库JXGL中,把学生表S中学号为“S2”的学生姓名改为“姜芸”、年龄改为22。 USE JXGL UPDATE S SET SNAME='姜芸',AGE=22 WHERE SNO='S2' GO 15.在教学管理数据库JXGL中,删除学生表S中姓名为张丽的学生记录。 USE JXGL DELETE S WHERE SNAME='张丽' GO 16.假设某“仓库管理”关系模型有下列五个关系模式: 零件PART(PNO,PNAME,COLOR,WEIGHT) 项目PROJECT(JNO,JNAME,JDATE) 供应商SUPPLIER(SNO,SNAME,SADDR) 供应P_P(JNO,PNO,TOTAL) 采购P_S(PNO,SNO,QUANTITY) 试用T-SQL DDL语句定义上述五个基本表,并说明主键和外键。 解: CREATE TABLE PART (PNO CHAR(6),PNAME CHAR(10) NOT NULL,COLOR CHAR(6),WEIGHT FLOAT(6),PRIMARY KEY(PNO)); CREATE TABLE PROJECT (JNO CHAR(6),JNAME CHAR(12)NOT NULL,DATE DATE,PRIMARY KEY(JNO)); CREATE TABLE SUPPLIER (SNO CHAR(8),SNAME CHAR(12)NOT NULL,SADDR VARCHAR(30),PRIMARY KEY(SNO)); CREATE TABLE P_P (JNO CHAR(6),PNO CHAR(6),TOTAL INTEGER,PRIMARY KEY(JNO,PNO); FOREIGN KEY(JNO) REFERENCES PROJECT(JNO), FOREIGN KEY(PNO) REFERENCES PART(PNO)); CREATE TABLE P_S (PNO CHAR(6),SNO CHAR(8),QUANTITY INTEGER,PRIMARY KEY(PNO,SNO) FOREIGN KEY(PNO) REFERENCES PART(PNO), FOREIGN KEY(SNO) REFERENCES SUPPLIER(SNO)); 第六章 数据查询 一、填空题 在T-SQL中涉及空值的查询不能用“=”而是用IS。 ORDER BY是对查询结果进行排序所以不能用在子查询中。 在T-SQL中集合的并运算用Union实现,交运算用Intersect实现,差运算用except实现。 SQL Server 支持三种类型的游标: T-SQL 游标、API游标、客户游标 在T-SQL创建主键的关键字是 Primary Key。在T-SQL创建外键的关键字是 Foreign Key 二、名词解释 连接查询:查询时要从多个基本表中提取数据,此时把多个基本表写在同一层的FROM子句中,这种查询形式称为连接查询。是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。 嵌套查询:查询时要从多个基本表中提取数据,此时把多个基本表分别放在不同层次上的FROM子句中,这种查询形式称为嵌套查询。 子查询:当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令。 无关子查询:不依赖于父查询的字查询。它执行的过程是:首先执行子查询语句,得到的子查询结果集传递给父查询语句使用。 相关子查询:SELECT语句嵌套时,子查询中查询条件依赖于外层查询中的值,因此子查询要反复求值供外层查询使用。这种子查询称为相关子查询。 游标:是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。它从包括多个元组的集合中每次读取一个元组的机制。 三、简答题 1.利用T-SQL语句声明一个游标,查询数据库学生表S中所有男生的信息,并读取数据。 (1) 读取最后一条记录。 (2) 读取第一条记录。 (3) 读取第5条记录。 (4) 读取当前记录指针位置后第3条记录。 解:USE JXGL GO DECLARE S_Cursor SCROLL CURSOR FOR SELECT * FROM S WHERE SEX='M' OPEN S_Cursor FETCH LAST FROM S_Cursor FETCH PRIOR FROM S_Cursor FETCH ABSOLUTE 5 FROM S_Cursor CLOSE S_Cursor DEALLOCATE S_Cursor GO 2. 声明一个游标S_Cur用以读取学生表S中男同学的信息,并将第三个男同学的年龄修改为25。 USE JXGL GO DECLARE S_Cur SCROLL CURSOR FOR SELECT * FROM S WHERE SEX='M' OPEN S_Cur FETCH ABSOLUTE 3 FROM S_Cur UPDATE S SET AGE=25 WHERE CURRENT Of S_Cur GO CLOSE S_Cur DEALLOCATE S_Cur GO 四、综合题 1.对于教学管理数据库的三个基本表 S(SNO,SNAME, SEX, AGE,SDEPT) SC(SNO,CNO,GRADE) C(CNO,CNAME,CDEPT,TNAME) 试用T-SQL查询语句表达下列查询: (1) 查询“王志强”所授课程的课程号和课程名。 (2) 查询年龄大于20岁的男学生的学号和姓名。 (3) 查询学号为S6的学生所学课程的课程名和任课教师名。 (4) 查询至少选修“王志强”老师所授课程中一门课程的女学生姓名。 (5) 查询“李小刚”同学不学的课程的课程号。 (6) 查询至少选修两门课程的学生学号。 解: (1) USE JXGL GO SELECT CNO,CNAME FROM C WHERE TNAME='王志强' GO (2) USE JXGL GO SELECT SNO,SNAME FROM S WHERE SEX='M' AND AGE>20 GO (3) USE JXGL GO SELECT CNAME,TNAME FROM S JOIN SC ON S.SNO=SC.SNO AND S.SNO='S6' JOIN C ON SC.CNO=C.CNO GO (4) USE JXGL GO SELECT SNAME FROM S WHERE SNO IN ( SELECT SNO FROM SC WHERE CNO IN (SELECT CNO FROM C WHERE TNAME='王志强' ) ) GO (5) USE JXGL GO SELECT CNO FROM C EXCEPT SELECT CNO FROM S JOIN SC ON S.SNO=SC.SNO AND S.SNAME='李小刚' GO (6) USE JXGL GO select SNO,count(CNO) as 选修门数 from sc group by SNO having count(CNO)>1 GO 2. 试用T-SQL查询语句表达下列对习题2数据库中三个基本表S、SC、C的查询: (1) 统计有学生选修的课程门数。 (2) 求选修C4号课程的学生的平均年龄。 (3) 求“王志强”老师所授课程的每门课程的学生平均成绩。 (4) 统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。 (5) 查询姓“王”的所有学生的姓名和年龄。 (6) 在SC中查询成绩为空值的学生学号和课程号。 (7) 查询年龄大于女同学平均年龄的男学生姓名和年龄。 解: (1) USE JXGL GO SELECT COUNT(DISTINCT CNO) FROM SC GO (2) USE JXGL GO SELECT AVG(AGE) FROM S JOIN SC ON S.SNO=SC.SNO AND CNO='C4' GO (3) USE JXGL GO SELECT SC.CNO,AVG(GRADE) FROM SC JOIN C ON SC.CNO=C.CNO AND TNAME='王志强' GROUP BY SC.CNO GO (4) USE JXGL GO SELECT CNO,COUNT(SNO) FROM SC GROUP BY CNO HAVING COUNT(*)>10 ORDER BY 2 DESC,1 GO (5) USE JXGL GO SELECT SNAME,AGE FROM S WHERE SNAME LIKE '王%' GO (6) USE JXGL GO SELECT SNO,CNO FROM SC WHERE GRADE IS NULL GO (7) USE JXGL GO SELECT SNAME,AGE FROM S WHERE SEX='M' AND AGE>(SELECT AVG(AGE) FROM S WHERE SEX='F') GO 3. 试用T-SQL更新语句表达对习题6-2中数据库中三个基本表S、SC、C的各个更新操作: (1) 在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(SNO,SNAME,SEX)。 (2) 在基本表SC中删除尚无成绩的选课元组。 (3) 把“张成民”同学在SC中的选课记录全部删去。 (4) 把选修“高等数学”课程中不及格的成绩全部改为空值。 (5) 把低于总平均成绩的女同学成绩提高5%。 解: (1) 建表: USE JXGL GO CREATE TABLE STUDENT(SNO CHAR(9) NOT NULL, SNAME CHAR(8) NOT NULL, SEX CHAR(2)) GO 查询结果插入: USE JXGL GO INSERT INTO STUDENT(SNO,SNAME,SEX) SELECT SNO,SNAME,SEX FROM S WHERE SNO IN (SELECT SNO FROM SC GROUP BY SNO HAVING MIN(GRADE)>80) GO (2) USE JXGL GO DELETE FROM SC WHERE GRADE IS NULL GO (3) USE JXGL GO DELETE FROM SC WHERE SNO IN(SELECT SNO FROM S WHERE SNAME='张成民') GO (4) USE JXGL GO UPDATE SC SET GRADE=NULL WHERE GRADE<60 AND CNO IN(SELECT CNO FROM C WHERE CNAME='高等数学') GO (5) USE JXGL GO UPDATE SC SET GRADE=GRADE*1.05 WHERE SNO IN(SELECT SNO FROM S WHERE SEX='F') AND GRADE<(SELECT AVG(GRADE) FROM SC) GO 4.设教务管理数据库中有三个关系:学生S(SNO,SNAME, SEX, AGE,SDEPT);选课SC(SNO,CNO,GRADE);课程C(CNO,CNAME,TEACHER),请将下面的关系代数表达式转化为SQL语句。 πSNO,GRADE(σπSNO,SNAME(σπSNO,SNAME(σ (SC)) CNAME=‘高等数学’ (S ? SC ? C)) CNO=‘C2’ (S ? SC)) CNO=‘C2’ 请将下面的元组关系演算表达式转化为SQL语句。 {t|Student(t) ∧t[5]=‘CS’} {t|Student(t) ∧t[4]>=20} {t2|(? u)Student(u) ∧t[1]=u[2 ]∧t[2]=u[5 ] } 5. 成绩管理数据库中有三个关系:学生Student(SNO,SNAME, SEX, AGE,SDEPT);选课SC(SNO,CNO,GRADE);课程Course(CNO,CNAME,CPNO,CCREDIT)请使用SQL的Create table完成以上三个表的定义。(必须定义出三个表的主键,C和SC的外键,字段的数据类型请自行定义) 6.请根据上题中建立的数据库,使用SQL完成以下操作。 将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。 插入一条选课记录( '200215128','01') 删除学号为200215128的学生记录。 删除计算机科学系(CS)所有学生的选课记录。 删除李明同学所有的选课记录。 将学生200915121的年龄改为22岁。 将计算机科学系(CS)全体学生的成绩置零。 建立信息系(IS)学生的视图,包含SNO,SNAME,AGE。 在Student表的SNAME(姓名)列上建立一个聚簇索引。 7. 请根据上题中建立的数据库,使用SQL完成以下查询操作。 查询全体学生的姓名、学号、所在系。 查全体学生的姓名及其出生年份。 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 查询选修了01,02号课程的学生的学号 查询所有姓刘学生的姓名、学号和性别。 查询姓\欧阳\且全名为三个汉字的学生的姓名。 查询选修了03号课程的学生的学号及其成绩,查询结果按分数降序排列。 查询选修0l号课程的学生平均成绩。 查询每门课的课程号及相应的选课人数。 查询选修了3门以上课程的学生学号。 查询每一门课的间接先修课(即先修课的先修课)。 利用左外连接实现查询每个学生及其选修课程的情况。 查询每个学生的学号、姓名、选修的课程名及成绩。 利用嵌套查询选修了课程名为“信息系统”的学生学号和姓名。 利用相关子查询实现找出每个学生超过他选修课程平均成绩的课程号。 用exists子句实现查询没有选修1号课程的学生姓名。 查询选修了全部课程的学生姓名。 第七章 视图与索引 一、名称解释 视图:视图是从一个或几个表导出来的表,它不是真实存在的基本表而是一张虚表,视图所对应的数 据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。也就是数据库中只存放视图的定义而不存放视图的数据。 杭列子集视图:若一个视图只是去掉了单个表的某些行或列,且保留了主键(码),这类视图称为行列子集视图。 索引:是对数据库表中一列或多列的值进行排序的一种结构,它是一种逻辑排序方法,一般并不需要改变数据的物理排列顺序,而是建立一个与数据相对应的索引文件,数据的显示和处理可以按索引表达式指定顺序进行,使用索引可快速访问数据库表中的特定信息。 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序。这种索引对查询非常有效,在每一张基本表中只能有一个聚集索引。 唯一索引:不允许具有索引值相同的行,从而禁止重复的索引或键值。并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查 二、填空 视图的作用可以体现在简单性、安全和逻辑独立性。 创建视图使用的SQL语句是 Create View。 对视图数据进行更新操作,一般情况下,只有行列子集视图是可以执行更新的。 在数据库中创建索引可以大大加快数据的检索(查询)速度。 索引可以分为聚集索引和非聚集索引,唯一索引和非唯一索引,简单索引和复合索引。 数据库一个表中只能建立一个聚集索引。 在表中创建主键约束时,如果表中没有聚集索引,SQL SERVER会在主键列上同时建立聚集索引。 三、简答 1.索引的优点和缺点? 优点 (1) 通过创建唯一性索引,可以保证表中每一行数据的唯一性。 (2) 可以大大加快数据的检索速度。 (3) 可以加速表和表之间的连接,维护参照完整性。 (4) 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 (5) 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 缺点 (1) 创建索引和维护索引要耗费时间。 (2) 索引需要占用物理空间,每一个索引还要占用一定的物理空间。 (3) 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 2.聚集索引和非聚集索引有何种异同? 聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。聚集索引即需要对已有表数据重新进行排序(若表中已有数据),即删除原始的表数据后再将排序结果按物理顺序插回,故聚集索引建立完毕后,建立聚集索引的列中的数据已经全部按序排列。一个表中只能包含一个聚集索引,但该索引可以包含多个列。非聚集索引类似书本索引,索引与数据存放在不同的物理区域,建立非聚集索引时数据本身不进行排序。一个表中可以含多个非聚集索引。 相同之处就是它们都是索引,都可以提高数据的查询速度。 3. 用T-SQL语句,按数据库JXGL中选修课程表SC的成绩列降序创建一个普通索引(非唯一、非聚集)。 解: USE JXGL GO CREATE INDEX SC_GRADE ON SC(GRADE DESC) GO 四、综合题 4.假设某“仓库管理”关系型数据库有下列五个关系模式: 零件PART(PNO,PNAME,COLOR,WEIGHT) 项目PROJECT(JNO,JNAME,JDATE) 供应商SUPPLIER(SNO,SNAME,SADDR) 供应P_P(JNO,PNO,TOTAL) 采购P_S(PNO,SNO,QUANTITY) (1) 试将PROJECT、P_P、PART三个基本表的自然联接定义为一个视图VIEW1, PART、P_S、SUPPLIER三个基本表的自然联接定义为一个视图VIEW2。 (2) 试在上述两个视图的基础上进行数据查询: ① 检索上海的供应商所供应的零件的编号和名字。 ② 检索项目J4所用零件的供应商编号和名字。 解: (1) CREATE VIEW VIEWl AS SELECT A.JNO,JNAME,DATE,C.PNO,PNAME,COLOR,WEIGHT,TOTAL FROM PROJECT A,P_P B,PART C WHERE A.JNO=B.JNO AND B.PNO=C.PNO; CREATE VIEW VIEW2 AS SELECT A.PNO,PNAME,COLOR,WEIGHT,C.SNO,SNAME,SADDR,QUANTITY FROM PART A,P_S B,SUPPLIER C WHERE A.PNO=B.PNO AND B.SNO=C.SNO; (2) ① SELECT PNO,PNAME FROM VIEW2 WHERE SADDR LIKE ’上海%’; ② SELECT SNO,SNAME FROM VIEWl,VIEW2 WHERE VIEWl.PNO=VIEW2.PNO AND JNO=’J4’; 5. 对于教务管理数据库中基本表SC,建立视图如下: CREATE VIEW S_GRADE(SNO,C_NUM,AVG_GRADE) AS SELECT SNO,COUNT(CNO),AVG(GRADE) FROM SC GROUP BY SNO 试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操 (1) SELECT * FROM S_GRADE (2) SELECT SNO,C_NUM FROM S_GRADE WHERE AVG_GRADE>80; (3) SELECT SNO,AVG_GRADE FROM S_GRADE WHERE C_NUM>(SELECT C_NUM FROM S_GRADE 作: SNO=’200912121’); (4) UPDATE S_GRADE SET C_NUM=C_NUM+1 WHERE SNO=’200915122’ (5) DELETE FROM S_GRADE WHERE C_NUM>4; 解: 答:⑴ 允许查询。相应的操作如下: SELECT SNO,COUNT(CNO) AS C_NUM,AVG(GRADE) AS AVG_GRADE FROM SC GROUP BY SNO; ⑵ 允许查询。相应的操作如下: SELECT SNO,COUNT(CNO)AS C_NUM FROM SC GROUP BY SNO HAVING AVG(GRADE)>80; ⑶ 允许查询。相应的操作如下: SELECT SNO,AVG(GRADE) AS AVG_GRADE FROM SC GROUP BY SNO HAVING COUNT(CNO)>(SELECT COUNT(CNO) FROM SC GROUP BY SNO HAVING SNO=’200912121’); ⑷ 不允许。C_NUM是对SC中的学生选修课程的门数进行统计,在未更改SC表时,要在视图S_GRADE中更改门数,是不可能的。 ⑸ 不允许。在视图S_GRADE中删除选修课程的门数在4门以上的学生元组,势必造成SC中这些学生学习元组的删除,这不一定是用户的原意,因此使用分组和聚合操作的视图,不允许用户执行更新操作。 第八章 存储过程、触发器和用户定义函数 一、名称解释 存储过程:是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 触发器:是一种对表进行插入、更新、删除的时候会自动执行的特殊存储过程。 用户定义函数:像系统内置函数一样,可以接受参数,执行复杂的操作并将操作结果以值的形式返回,也可以将结果用表格变量返回。 二、填空题 触发器和存储过程的执行不是在客户端而是在服务器端。 存储过程是一组为了完成特定功能的SQL 语句的集合。 存储过程可以定义输入和输出参数,其中输出参数的定义需要使用OUTPUT关键词。 触发器可以分为DML和DDL触发器两类。 DML触发器分为After和Instead of 触发器。 用户可以在表上定义INSTEAD OF触发器,也可以在视图上定义,但对同一操作只能定义一个INSTEAD OF触发器。 用户定义函数的优点是模块化程序设计、执行速度快、减少网络流量。 在SQL SERVER中用户定义函数分为标量型、内联表值型、多语句表值型函数。 执行触发器时,系统创建了两个特殊的临时表inserted表和deleted表。 三、简答题 1.使用存储过程的优势和不足 提高了处理复杂任务的能力。增强了代码的复用率和共享性。减少网络中的数据流量。可作为安全机制使用。 存储过程的修改比较烦琐。可移植性差。不支持面向对象的设计。代码可读性差,因此一般比较难维护。 2.对于例5.9教学管理数据库的表S和SC,有下列程序清单,试叙述其功能。 USE JXGL GO DECLARE @MyNo CHAR(9) SET @MyNo='S7' IF (SELECT SDEPT FROM S WHERE SNO=@MyNo)='CS' BEGIN SELECT AVG(GRADE) AS '平均成绩' FROM SC WHERE SNO=@MyNo END ELSE PRINT '学号为'+@MyNo+'的学生不存在或不属于计算机科学系' GO 答:输入一个学生的学号,如果该学生属于计算机科学系则输出该学生的平均成绩,否则输出:该学号的学生不存在或不属于计算机科学系的提示。 3.简述存储过程与触发器的区别。 答:触发器与存储过程可以说是非常相似,可以说是一种变种的存储过程,触发器和存储过程一样都是SQL语句集。存储过程执行后驻留在计算机的高速缓冲区中,利用存储过程可以提高程序的效率,但存储过程只能通过调用来运行,可以有返回的状态值,存储过程可以在程序端调用执行。触发器是不可以在程序端调用的,它是SQL服务器端自动运行。触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。 4.AFTER触发器和INSTEAD OF触发器有什么不同? 答:AFTER触发器要求只有执行某一操作INSERT、UPDATE、DELETE之后触发器才被触发,且只能定义在表上,也可以针对表的同一操作定义多个触发器以及它们触发的顺序。而INSTEAD OF触发器表示并不执行其定义的操作(INSERT、UPDATE、DELETE)而仅是执行触发器本身。既可以在表上定义INSTEAD OF触发器,也可以在视图上定义,但对同一操作只能定义一个INSTEAD OF触发器。 5.在教学管理数据库中,创建一个名为STU_AGE的存储过程,该存储过程根据输入的学号,输出该学生的出生年份。 解: USE JXGL GO CREATE PROCEDURE STU_AGE @S_SNO CHAR(8) AS SELECT YEAR(GETDATE()-AGE) AS 'YEAR' FROM S WHERE SNAME=@S_SNO GO 6.在教学管理数据库中,创建一个名为GRADE_INFO的存储过程,其功能是查询某门课程的所有学生成绩。显示字段为:CNAME,SNO,SNAME,GRADE。 解: USE JXGL GO CREATE PROCEDURE GRADE_INFO @C_NAME VARCHAR(50) AS SELECT CNAME,SC.SNO,SNAME,GRADE FROM S JOIN SC ON S.SNO=SC.SNO JOIN C ON SC.CNO=C.CNO AND CNAME=@C_NAME GO 7.在教学管理数据库中,创建一个INSERT触发器TR_C_INSERT,当在C表中插入一条新记录时,触发该触发器,并给出“你插入了一门新的课程!”的提示信息。 解: CREATE TRIGGER TR_C_INSERT ON C FOR INSERT AS PRINT '你插入了一门新的课程!' GO 8. 在教学管理数据库中,创建一个AFTER触发器,要求实现以下功能:在SC表上创建一个插入、更新类型的触发器TR_GRADE_CHECK,当在GRADE字段中插入或修改成绩后,触发该触发器,检查分数是否在0~100之间。 解: CREATE TRIGGER TR_GRADE_CHECK ON SC FOR INSERT,UPDATE AS DECLARE @SC_grede tinyint SELECT @SC_grade=SC.grade FROM SC IF (@SC_grade NOT BETWEEN 0 AND 100) PRINT '你插入的成绩不在0~100之间!' GO 9.在教学管理数据库中,创建用户定义函数C_MAX,根据输入的课程名称,输出该门课程最高分数的同学学号。 解: USE JXGL GO CREATE FUNCTION C_MAX (@C_NAME CHAR(8)) RETURNS REAL AS BEGIN DECLARE @S_MAX REAL SELECT @S_MAX=MAX(GRADE) FROM SC JOIN C ON SC.CNO=C.CNO AND C.CNAME=@C_NAME RETURN @S_MAX END GO 10.在教学管理数据库中,创建用户定义函数SNO_INFO,根据输入的课程名称,输出选修该门课程的学生学号、姓名、性别、系部、成绩。 解: USE JXGL GO CREATE FUNCTION SNO_INFO (@C_NAME CHAR(8)) RETURNS TABLE AS RETURN(SELECT S.SNO,SNAME,SEX,SDEPT,GRADE FROM S JOIN SC ON S.SNO=SC.SNO JOIN C ON SC.CNO=C.CNO AND C.CNAME=@C_NAME) GO 第九章 数据库并发控制 一、名词解释 事务:就是用户对数据库进行的一系列操作的集合,对于事务中的系列操作要么全部完成,要么全部不完成。 并发操作:在多用户共享系统中,许多事务可能同时对同一数据进行操作,这种操作称为并发操作。 封锁:封锁是系统保证对数据项的访问以互斥方式进行的一种手段。使事务对它要操作的数据有一定的控制能力。封锁机制主要是为了对并发操作进行控制,对对象进行封锁,保证数据的一致性和准确性。 X锁:事务T对某数据加了X锁后,其他事务要等T解除X锁后,才能对这个数据进行封锁。 S锁:事务T对某数据加了S锁后,仍允许其他事务再对该数据加S锁,但在对该数据的所有S锁都解除之前决不允许任何事务对该数据加X锁。 保存点:是事务在某一点处设置一个标记,这样当使用回滚语句时,可以不用回滚到事务的起始位置,而是回滚到标记所在的位置。 死锁:它是指系统中有两个或两个以上的事务都处于等待状态,并且每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果造成任何一个事务都无法继续执行。 二、填空题 在SQL SERVER中,事务的运行有四种模式:自动提交事务、显式事务、隐式事务、批处理级事务。 事务的性质简称ACID,分别指的是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 事务的隔离性由DBMS的并发控制子系统来实现。 事务的持久性由DBMS的恢复管理子系统来实现。 显式事务的定义是以Begin Transaction开始,以Commit Transaction结束。 在SQL SERVER中隐式事务默认是关闭,要想使用隐式事务可使用SET IMPLICIT_TRANSACTIONS ON,将其切换隐式事务模式。 @@TRANCOUNT函数可以记录当前事务的嵌套级别。 每个 BEGIN TRANSACTION 语句使 @@TRANCOUNT 加 1。 每个 COMMIT TRANSACTION 语句使 @@TRANCOUNT 减 1。 没有事务名的ROLLBACK TRANSACTION 语句将回滚所有嵌套事务,并使 @@TRANCOUNT 减小到 0。 封锁的基本类型有两种:排它锁(又叫写锁或X锁)和共享锁(读锁或S锁)。 在SQL SERVER中可以使用SET TRANSACTION ISOLATION语句设置事务的隔离级别,SQL SERVER的默认隔离级别是READ COMMITED。 三、简答题 1.简述事务的四个基本特性。 (1) 原子性(Atomicity)一个事务对数据库的所有操作,是一个不可分割的工作单元。这些操作要么全部执行,要么什么也不做(就效果而言)。 (2) 一致性(Consistency)。一个事务独立执行的结果,应保持数据库的一致性。即数据不会因事务的执行而遭受破坏。 (3) 隔离性(Isolation)。在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样,此时称事务达到了隔离性的要求。 (4) 持久性(Durability)。一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中。即使以后系统发生故障,也应保留这个事务执行的痕迹。 2.简述显式事务与隐式事务的区别。 答:显式事务是由用户自己指定的事务,使用关键字BEGIN TRANSACTION和ROLLBACK TRANSACTION或COMMIT TRANSACTION进行事务的开始和终止事务的操作。 隐式事务不需要使用BEGIN TRANSACTION定义事务的开始,但必须使用ROLLBACK TRANSACTION或COMMIT TRANSACTION语句提交事务,在SQL SERVER中可以通过SET IMPLICIT_TRANSACTIONS ON /OFF来打开和关闭隐式事务。 3.简述并发数据操作容易引发的问题。 (1) 丢失更新(lost update)。当两个或多个事务更新同一个数据资源时,最后的更新将覆盖其它事务前面的更新。 (2) 读脏数据(dirty read),有时也简称为“脏读”。一个事务读到另一个事务未提交的更新数据。 (3) 不可重复读(不一致分析)。一个事务两次读同一行数据,而这两次读到的数据不一样。 (4) 幻读。一个事务两次相同的查询请求,而这两次读到的数据的记录条数不一样。 4.如何在事务中设置保存点,保存点有什么用途? 答:保存点是事务在某一点处设置一个标记,这样当使用回滚语句时,可以不用回滚到事务的起始位置,而是回滚到标记所在的位置。保存点用于回滚部分事务。可以使用 SAVE TRANSACTION savepoint_name 语句创建一个保存点,然后再执行 ROLLBACK TRANSACTION savepoint_name 语句回滚到该保存点,从而无须回滚到事务的开始。保存点可提高事务的执行效率,方便程序的调试等操作。 5.在教学管理数据库中,创建一个事务,将所有“C3”号课程的女同学加5分,并提交。 解: USE JXGL GO DECLARE @TranName VARCHAR(20) SELECT @TranName='Add_Grade' BEGIN TRAN @TranName UPDATE SC SET GRADE=GRADE+5 FROM S JOIN SC ON S.SNO=SC.SNO AND CNO='C3' COMMIT TRAN @TranName GO 6. 在教学管理数据库中,创建一个事务,向C表添加一条记录,设置保存点;再将“C4”号课程的任课老师更改为“王晓清”。 解: USE JXGL GO BEGIN TRAN INSERT INTO C VALUES('C11','数学建模','MA','李守信') SAVE TRAN savepoint UPDATE C SET TNAME='王晓清' WHERE CNO='C4' COMMIT TRAN GO 7. 封锁具有3个环节? 第一个环节是申请加锁,即事务在操作前要对它欲使用的数据提出加锁请求; 第二个环节是获得锁,即当条件成熟时,系统允许事务对数据加锁,从而事务获得数据的控制权; 第三个环节是释放锁,即完成操作后事务放弃数据的控制权。