数据库原理与实践教材练习题答案.doc

上传人:s****u 文档编号:12744837 上传时间:2020-05-21 格式:DOC 页数:20 大小:269.02KB
返回 下载 相关 举报
数据库原理与实践教材练习题答案.doc_第1页
第1页 / 共20页
数据库原理与实践教材练习题答案.doc_第2页
第2页 / 共20页
数据库原理与实践教材练习题答案.doc_第3页
第3页 / 共20页
点击查看更多>>
资源描述
第一章一、单项选择题DBDCD ABBCC CADAD二、填空题1、文件系统2、层次模型的IMS系统,网状模型的DBTG报告,E.F.Codd3、数据的完整性,并发控制4、操作系统,数据库管理系统5、内三、简答题1、数据处理是指信息的收集、管理、加工、传播等一系列活动的总和。数据管理是指对数据进行分类、组织、编码、存储、检索和维护。数据管理是数据处理的基本环节,是任何数据处理业务中必不可少的共有部分,是数据处理的中心问题。2、数据库技术的特点:(1)数据整体结构化,数据的共享性高,冗余度小;(2)程序与数据之间的独立性高;(3)数据得到统一管理和控制。数据的整体结构化是数据库技术的主要特征之一,也是数据库系统与文件系统的根本区别。文件系统是数据库技术的基础,因为数据库技术中对数据库的读写操作最终还是通过文件系统去实现的。3、尽管有各种各样的信息系统,但它们的主要功能都是进行信息处理(即数据处理),而数据处理都涉及到数据的管理问题。如果数据的管理由各个信息系统自己去实现,不但耗时耗钱,而且系统的稳定性、可靠性、安全性、响应时间都不能得到保证。因为数据管理软件的编写是一项专业性很强的工作,不是一般的程序员可以胜任的。采用数据库技术后,数据的管理就由DBMS去完成,而DBMS是专业公司开发的,系统的稳定性、可靠性、安全性、响应时间都有保证,而且缩短了系统的开发时间,节约了成本。4、数据库系统是引入了数据库技术后的计算机系统,一般由数据库、数据库管理系统(及其开发工具)、数据库应用系统、数据库管理员(DBA)构成。DBA是数据库系统中最重要的一类人员。具体职责包括:(1)决定数据库中的信息内容和结构;(2)决定数据库的存储结构和存取策略;(3)定义数据的安全性要求和完整性约束条件;(4)监控数据库的使用和运行;(5)数据库的改进和重组。5、目前最常见的商用DBMS有:Oracle、DB2、SQL Server、MySQL等。DBMS一般有六大功能:(1)数据定义功能;(2)数据组织、存储和管理;(3)数据操纵功能;(4)数据库的运行管理和事务管理;(5)数据库的建立和维护功能。6、模式是数据库中全体数据的逻辑结构和特征的描述,是全体用户数据的最小并集。数据库模式以某一种数据模型为基础,综合考虑了所有用户的需求,并将这些需求有机地结合成一个逻辑整体。一个数据库只有一个模式。外模式是用户的数据视图,是用户可看见和使用的局部数据逻辑结构和特征的描述,是与某一具体应用有关的数据的逻辑表示。显然,外模式是模式的子集,且可以有多个。内模式是数据库中数据的物理结构和存储方法的描述,是数据在数据库内部的表示方式。内模式负责定义所有数据的物理存储策略和访问控制方法。一个数据库只有一个内模式。7、数据库系统采用外模式、模式、内模式三级模式结构,三级模式是对数据的三个抽象级别,它把数据的具体组织留给DBMS管理,使用户能逻辑地抽象地处理数据,而不必关心数据在计算机中的具体表示方式和存储方式,不必考虑存取路径等细节。DBMS在这三级模式之间提供了两层映像:外模式/模式映像、模式/内模式映像。正是这两层映像保证了数据库系统中的数据具有较高的逻辑独立性和物理独立性。另外,外模式是数据库安全性的一个有力措施,模式实现了数据的共享,减少了数据的冗余。8、程序与数据的逻辑独立性是指当模式改变时,可由数据库管理员改变外模式模式映像,使得每个外模式保持不变,而应用程序是根据外模式编写的,从而不必修改应用程序。程序与数据的物理独立性是指当内模式改变时,可由数据库管理员改变模式/内模式映像,使得模式保持不变(外模式当然也不变),从而不必修改应用程序。第二章一、单项选择题BDACA BDCBB ABDAB DBDAD二、填空题1、模拟现实世界2、数据结构3、逻辑模型4、实体5、多对多6、网状模型,面向对象模型7、指针8、关系9、候选码10、实体完整性,参照完整性三、简答题1、概念模型具有较强的语义表达能力,能够方便、直接地表达应用所涉及到的现实世界中的各种语义知识,另一方面它概念简单、清晰,易于用户理解,且不依赖于具体的计算机系统。概念模型主要用于数据库设计,是用户与数据库设计人员之间进行交流的桥梁。2、表示概念模型最常用的方法是用E-R图来表示概念模型,这种概念模型也称E-R模型。画E-R图的步骤:(1)确定实体;(2)确定各实体的属性;(3)确定实体之间的联系;(4)确定各联系的属性。3、非关系模型中实体之间的联系是通过指针来实现的,因此查询效率较高。缺点是数据结构复杂,不易理解,编程也复杂。关系模型的优点是:有严格的理论基础,概念单一;数据结构简单、清晰、用户易理解;存取路径对用户透明,程序与数据的独立性高,易于应用程序的编写和维护。缺点主要是查询效率不如非关系模型,DBMS的开发难度高。4、在关系模型中的概念单一主要体现在数据结构单一(即现实世界中实体以及实体之间的各种联系都用关系来表示),而数据结构单一又带来操作符的统一。操作符的统一体现在无论是插入(或删除修改)一个实体值还是插入(或删除修改)一个联系值,操作的命令是相同的(不像DBTG中用STORE插入实体值,用CONNECT插入联系值),这大大方便了用户的使用。5、所谓存储路径对用户透明就是指用户不需要知道数据的物理结构和存储方式。优点:因为存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,简化了程序员的工作。缺点:因为存取路径对用户透明,导致查询效率不如非关系系统,增加了开发DBMS的难度。6、关系模型中有三类完整性约束,包括实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系数据库系统自动支持。实体完整性规则:若属性A是基本关系R主码中的属性,则属性A不能取“空值”。参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(R和S可以是同一个关系),则对于R中每个元组在F上的值必须等于S中某个元组的主码值或者取空值(F的每个属性值均为空值)。用户定义的完整性是针对某一具体的关系数据库的约束条件,它反映了某一具体应用所涉及的数据必须满足的语义要求。7、外码不是一定可以取空值的。当外码是本关系主码中的属性时,外码不能取空值,如果取空值将违反实体完整性规则。例如,选修关系中的外码“学号”和“课程号”就不能取空值。所以只有当外码不是本关系主码中的属性时,外码才可以取空值。8、用户只要告诉系统操作的要求,不必告诉系统如何来完成该操作(即用户只要告诉系统“做什么”,而不必告诉“怎么做”)的语言就是非过程化语言。9、自然连接是一种特殊的等值连接,它与等值连接的区别表现在:被连接的两个关系中进行相等比较的分量必须是相同的属性(组),并且要在结果中把重复的属性(组)去掉。10、例如,如果要实现查询要求“查询所有学生信息并同时查询他的选课信息”,这时就要做学生关系与选修关系的自然连接,如果有学生还没有选修过课程,那么该学生信息将会在结果关系中消失,不符合查询要求,这时就要用到左外连接。四、关系代数1、Gnane, Price(Manufac=海尔 (Goods)2、Gnane, Price(Gtype=手机 Manufac=华为 (Goods)3、Cno(Customers) -Cno(Sells)4、Cno, Cname, Mphone(Customers) (Cno(Customers) -Cno(Sdate=2015-01-01 (Sells) )5、Sno, Gno(Detail)Gno(Gno=140010123Gno=150020234 (Goods) 也可以用自连接做6、Cno, Gno(Sells Detail)Gno(Gtype=奶粉 (Goods)7、gsum(Quantity) as 销售总数量(Detail Gno(Gname=WR700N无线路由器 Manufac=TP-LINK (Goods) )8、Gtypegcount(Gno) as 品种数, avg(Price) as 平均价格(Goods)9、Gtype(平均价格1000 ( Gtypegavg(Price) as 平均价格(Goods) )10、Cno, Cname, Mphone, Sdate, IsPay(Customers Sells)第三章一、单项选择题DACDB ADADB BCBAB DCDAC二、填空题1、主数据,日志2、查询速度,13、1,主4、字符数据,二进制数据5、系统,系统,数据字典,系统6、用户,tempdb7、拒绝8、删除三、简答题1、数据定义语言(DDL)主要定义数据库的逻辑结构,包括定义基本表、索引和视图三个部分;数据操纵语言(DML)包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和修改三种操作;数据控制语言(DCL)主要有对基本表和视图的授权,事务控制语句等。2、SQL语言的主要特点包括:(1)综合统一,即集DDL、DML和DCL功能于一体;(2)面向集合的操作方式,即操作的对象和操作的结果都是元组的集合;(3)高度非过程化,即在完成某项查询要求时,用户无需了解存取路径,只要提出“做什么”,不必指出“怎么做”;(4)以同一种语法结构提供两种使用方式,即独立地用于联机交互的使用方式和嵌入到高级语言中这两种不同的使用方式下,语法结构是基本上一致的;(5)支持三级模式结构。3、RDBMS的完整性控制机制都应有完整性定义、完整性检查和违约处理这三方面的功能。4、列级完整性约束条件中涉及的属性只能是本列中的属性,而表级完整性约束条件中涉及的属性可以是本表中所有列中的属性。5、SQL语言中,在用CREATE TABLE语句创建表时,可以用PRIMARY KEY定义主码,定义主码即实现了实体完整性;也可以用FOREIGN KEY REFERENCES定义外码,定义外码即实现了参照完整性。6、用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。在SQL Server中可以在列级或表级用NOT NULL(属性取非空值)、UNIQUE(属性取值唯一)和CHECK(检查属性值是否满足一个逻辑表达式)三种形式实现用户定义的完整性。另外,T-SQL语言中的DEFAULT(属性取默认值)也可以理解为列级用户定义的完整性约束。7、三种处理方式:(1)拒绝(NO ACTION)执行,即不允许执行该操作,一般为默认违约处理方式。(2)级连(CASCADE)操作,表示当删除或修改被参照表的一个元组造成了参照表中某些元组的外码违反了参照完整性约束,则系统会自动删除或修改参照表中所有违反参照完整性约束的元组。(3)设置为空值(SET NULL),表示当删除或修改被参照表的一个元组造成了参照表中某些元组的外码违反了参照完整性约束,则系统会自动将参照表中所有违反参照完整性约束的元组的外码设置为空值。8、只有一种处理方式,拒绝(NO ACTION)执行,即不允许执行该操作。四、SQL语言1、 CREATE TABLE Customers ( Cnochar(8) PRIMARY KEY , Cnamechar(12) NOT NULL , Csexchar(2) NOT NULL CHECK ( Csex IN (男,女) ) , Cagetinyint NOT NULL , Caddress varchar(50) , Mphonechar(11) NOT NULL , Email varchar(30) ) CREATE TABLE Goods ( Gnochar(9)PRIMARY KEY , Gnamechar(20) NOT NULL , Gtype char(8)NOT NULL , Price decimal(9,2) NOT NULL CHECK ( Price BETWEEN 1 AND 100000 ) , Manufac char(12) NOT NULL ) CREATE TABLE Sells ( Snochar(14)PRIMARY KEY , Sdatedatetime NOT NULL , Saddress varchar(50) NOT NULL , Cno char(8) NOT NULL FOREIGN KEY REFERENCES Customers(Cno) , IsPay char(1) NOT NULL CHECK ( IsPay IN (N,Y) ) ) CREATE TABLE Detail ( Snochar(14) FOREIGN KEY REFERENCES Sells(Sno) , Gnochar(9) FOREIGN KEY REFERENCES Goods(Gno) , Quantity smallint NOT NULL CONSTRAINT ck_D CHECK ( Quantity BETWEEN 1 AND 100 ) , PRIMARY KEY ( Sno,Gno ) )2、ALTER TABLE Customers ADD CONSTRAINT ck1_C CHECK ( Cage = 10 ) ALTER TABLE Customers ADD CONSTRAINT ck2_C UNIQUE ( Mphone )3、ALTER TABLE Detail DROP CONSTRAINT ck_D ALTER TABLE Detail ADD CONSTRAINT ck_D CHECK ( Quantity BETWEEN 1 AND 1000 )4、SELECT Gname, Price FROM Goods WHERE Manufac=海尔 ORDER BY Price DESC5、SELECT Gname, Price FROM Goods WHERE Manufac=华为 AND Gname LIKE %手机%6、SELECT COUNT(*) FROM Goods7、SELECT Gtype, COUNT(*), AVG(Price) FROM Goods GROUP BY Gtype8、SELECT Gtype FROM Goods GROUP BY Gtype HAVING AVG(Price)10009、SELECT Sno, S.Cno, Cname, Mphone FROM Sells S JOIN Customers C ON S.Cno=C.Cno WHERE IsPay=N AND Sdate BETWEEN 2015-05-01 AND 2015-05-3110、SELECT C.Cno, Cname, Mphone, Sdate, IsPay FROM Customers C LEFT JOIN Sells S ON C.Cno=S.Cno11、SELECT S.Sno, Sdate, Cname, SUM(Quantity*Price) FROM Sells S, Customers C, Detail D, Goods G WHERE S.Cno=C.Cno AND S.Sno=D.Sno AND D.Gno=G.Gno GROUP BY S.Sno, Sdate, Cname12、SELECT SUM(Quantity) FROM Detail D JOIN Goods G ON D.Gno=G.Gno WHERE Manufac=TP-LINK AND Gname=WR700N无线路由器 另一种做法: SELECT SUM(Quantity) FROM Detail WHERE Gno IN (SELECT Gno FROM Goods WHERE Manufac=TP-LINK AND Gname=WR700N无线路由器)13、SELECT Cno FROM Customers WHERE Cno NOT IN (SELECT Cno FROM Sells)14、SELECT Cno, Cname, Mphone FROM Customers WHERE Cno NOT IN (SELECT Cno FROM Sells WHERE Sdate=2015-01-01)15、SELECT Gno, Gname, Manufac FROM Goods G WHERE Price = (SELECT MIN(Price) FROM Goods WHERE Gtype=G.Gtype)16、SELECT Gname, Price, Manufac FROM Goods WHERE Gno IN (SELECT Gno FROM Detail GROUP BY Gno HAVING SUM(Quantity)=ALL(SELECT SUM(Quantity) FROM Detail GROUP BY Gno)17、SELECT Sno FROM Detail D WHERE Gno=140010123 AND EXISTS (SELECT * FROM Detail WHERE Sno=D.Sno AND Gno=150020234) 另一种做法: SELECT Sno FROM Detail WHERE Gno=140010123 OR Gno=150020234 GROUP BY Sno HAVING COUNT(*)=218、SELECT Cno FROM Customers C WHERE NOT EXISTS (SELECT * FROM Goods G WHERE Gtype=奶粉 AND NOT EXISTS (SELECT * FROM Sells S JOIN Detail D ON S.Sno=D.Sno WHERE S.Cno=C.Cno AND D.Gno=G.Gno)19、SELECT Gno, Gname, Manufac FROM Goods G, (SELECT Gtype, MIN(Price) AS MinPrice FROM Goods GROUP BY Gtype) AS GtypePrice WHERE G.Gtype=GtypePrice.Gtype AND Price=MinPrice20、UPDATE Goods SET Price=0.95*Price WHERE Gtype=手机21、DELETE FROM Goods WHERE Gno=11005011122、INSERT INTO Goods VALUES (150050111, P8手机, 手机, 2499, 华为)第四章一、单项选择题ABADC ACCDB二、填空题1、搜索码,搜索码值2、有序3、稀疏,稠密,1,多4、249,165、CLUSTERED6、PRIMARY KEY,UNIQUE7、索引视图三、简答题1、模式DDL有CREATE TABLE语句,子模式DDL有CREATE VIEW语句,内模式DDL有CREATE INDEX语句。2、表中每个搜索码值都有一个索引项,这种索引称为稠密索引。当表按照搜索码值有序存储时,可以只为搜索码的某些值建立索引项,这种索引称为稀疏索引。稠密索引可以比稀疏索引更快地定位一条记录,但稠密索引所占用的存储空间比稀疏索引大。3、所谓聚集索引就是指表中的元组按照索引中搜索码指定的顺序排序,使得具有相同搜索码值的元组在物理上聚集在一起。显然,一张表最多只能有一个聚集索引。聚集索引往往是稀疏索引,可以只存储部分搜索码值。因为表中的元组是按聚集索引而不是辅助索引的搜索码有序存放的,所以辅助索引必须是稠密索引,对每个搜索码值都有一个索引项,包含指向表中每个元组的指针。显然,一张表可以创建多个辅助索引。4、如果索引小到可以放在内存中,那么搜索一个索引项的时间就可以忽略。但是,如果索引过大而不能放在内存中,那么当需要时,就必须从磁盘中读取索引块,于是搜索一个索引项可能需要多次读取磁盘块,是一个相当耗时的过程。所以不管是聚集索引,还是辅助索引,当索引项很多,索引很大时,实际使用的往往都是多级索引。 5、见教材4.1.2小节6、基本表在数据库中既要存放它的定义,又要存放它的数据。而视图是从一张或几张基本表(或视图)导出的表。与基本表不同,视图是一张虚表,在数据库中只存放视图的定义(即SELECT语句),不存放视图对应的数据(即SELECT语句的查询结果)。两者的联系是视图的数据在它对应的基本表中,所以基本表中的数据一旦发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,通过它用户可以看到数据库中自己感兴趣的数据及其变化。7、如果定义视图的子查询对下列条件都能满足,那么该视图是可以更新的:(1)FROM子句中只有一个数据库关系;(2)SELECT子句中只包含关系的属性名,不包含任何表达式、聚集函数或DISTINCT短语;(3)没有出现在SELECT子句中的属性可以取空值,也不是主码中的属性;(4)子查询中没有GROUP BY或HAVING子句。四、SQL语言1、CREATE INDEX Index_Customers_Cname ON Customers(Cname)2、CREATE INDEX Index_Goods_GtypePrice ON Goods(Gtype, Price)3、CREATE INDEX Index_Sells_CnoSdate ON Sells(Cno, Sdate DESC)4、CREATE VIEW GoodsPhone AS SELECT * FROM Goods WHERE Gtype=手机5、CREATE VIEW GoodsPhoneHuaWei AS SELECT * FROM GoodsPhone WHERE Manufac=华为6、CREATE VIEW SellsQuantity(Gname, Price, Manufac, Squantity) AS SELECT Gname, Price, Manufac, SUM(Quantity) FROM Goods G JOIN Detail D ON G.Gno=D.Gno GROUP BY G.Gno, Gname, Price, Manufac7、SELECT Gname, Price, Manufac FROM SellsQuantity WHERE Squantity = (SELECT MAX(Squantity) FROM SellsQuantity)8、CREATE VIEW SellsMoney(Sno, Sdate, Cname, Csex, Cage, Smoney) AS SELECT S.Sno, Sdate, Cname, Csex, Cage, SUM(Quantity*Price) FROM Sells S, Customers C, Detail D, Goods G WHERE S.Cno=C.Cno AND S.Sno=D.Sno AND D.Gno=G.Gno GROUP BY S.Sno, Sdate, Cname, Csex, Cage9、SELECT Cname, Csex, Cage FROM SellsMoney WHERE Sdate BETWEEN 2014-01-01 AND 2014-12-31 GROUP BY Cname, Csex, Cage HAVING SUM(Smoney)1000010、INSERT INTO GoodsPhone VALUES (150050111, P8手机, 手机, 2499, 华为)第五章一、单项选择题BADCB CABDD二、填空题1、网络系统2、合法权限检查机制3、自主,强制4、视图机制,审计,数据加密5、dbo,guest,dbo6、public7、数据库对象,操作类型8、Windows,混合三、简答题1、数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。数据库的完整性是指数据库的任何状态变化都能反映真实存在的客观世界的合理状态,数据库中的数据应始终保持正确且合理的状态。也就是说,数据库的完整性是指数据的正确性和相容性。两者的定义已经看出两者的区别,而两者的联系主要体现在触发器机制既可以用来实现完整性,也可以用来实现安全性。2、数据库安全性控制的常用方法和技术有:1、用户标识和鉴别;2、存取控制;3、视图机制;4、审计;5、数据加密。3、在SQL Server中,有登录名和数据库用户两个概念。登录名是验证用户是否有权限连接到SQL Server服务器,数据库用户是验证用户登录服务器后是否有对服务器上的某个数据库进行操作的权限。用户必须拥有和自己登录名对应的数据库用户才可以对某个数据库进行操作,这样增强了数据库的安全性,避免了一个用户在登录到服务器后可以对服务器上的所有数据库进行操作。DBA可以用CREATE LOGIN和DROP LOGIN创建和删除登录名,用CREATE USER和DROP USER创建和删除数据库用户。4、角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的数据库用户创建一个角色,所以也可以说角色是具有相同权限的数据库用户组。对一个角色授权或收回权限适用于该角色的所有成员,因此使用角色来管理权限可以简化授权的过程。5、DBA可以用CREATE ROLE和DROP ROLE创建和删除角色,用系统存储过程sp_addrolemember和sp_droprolemember为角色添加成员和从角色删除成员。6、固定角色是系统内置的(预先定义好的),用户不能添加、修改或删除固定角色,只能修改固定角色的成员。固定角色分为固定服务器角色和固定数据库角色两大类。固定服务器角色有八种,其成员是登录名;而固定数据库角色有十种,其成员是数据库用户。DBA可以用系统存储过程sp_addsrvrolemember为某个固定服务器角色添加成员,用sp_dropsrvrolemember从某个固定服务器角色中删除成员。DBA可以用系统存储过程sp_addrolemember为某个固定数据库角色添加成员,用sp_droprolemember从某个固定数据库角色中删除成员。第六章一、单项选择题DCBAC ACADB二、填空题1、GO2、-3、4、多语句表值型5、游标6、T-SQL7、sp_8、VARYING9、UPDATE10、DML三、简答题1、批是一起提交给SQL Server服务器执行的一个或多个T-SQL语句的集合。由于批中的语句是作为一个整体发送给SQL Server服务器进行语法分析、优化、编译和执行,所以大大提高了执行效率。批也常常被用在某些事必须在前面做,或者必须与其他事分开的脚本中。2、一条SET语句只能给一个变量赋值,而一条SELECT语句可以给多个变量赋值。另外,SELECT语句也可以把查询的结果存放到局部变量中保存起来。3、关闭游标意味着释放当前数据结果集,并解除定位于游标的行上的游标锁定;关闭游标并不释放它占用的数据结构以便重新打开,但在重新打开游标之前,不允许读取和定位修改。如果一个游标名或游标变量是最后引用游标的名称或变量,则释放游标后,游标使用的任何资源也随之释放。4、存储过程是一组实现某个特定功能的T-SQL语句的集合,经预编译后存储在服务器上的数据库中。存储过程可以避免代码的重复,隐藏SQL的细节,实现对业务逻辑的封装。存储过程既提高了执行效率,又减少了网络流量,降低了网络负载。另外,系统管理员可以通过对执行存储过程的权限进行限制,避免非授权用户对数据的访问,保证数据的安全性。5、触发器作为一种特殊类型的存储过程,不同于存储过程,触发器不能被显式地调用,当触发器所定义的触发事件发生时,触发器被触发而自动执行。触发器的主要作用是能够实现比参照完整性更为复杂的两张表或多张表之间的数据的完整性和一致性,从而保证表中数据的变化符合数据库设计者所确定的业务规则。触发器也可以用来实现数据库的安全性。四、SQL语言 INSERT INTO Customers VALUES(12345678,张永斌,男,35,上海市,13612345678,ybzhang163.com) INSERT INTO Customers VALUES(12345680,李元祥,男,23,上海市,13612345680,yxli163.com) INSERT INTO Customers VALUES(12345682,王雪旖,女,19,苏州市,13612345682,xywang163.com) INSERT INTO Goods VALUES(140010123, 1.5匹变频空调, 空调, 2799, 海尔) INSERT INTO Goods VALUES(140050234, B199电信手机, 手机, 999, 华为) INSERT INTO Goods VALUES(150020234, 16G至尊高速TF卡 , 存储卡, 39, 闪迪) INSERT INTO Goods VALUES(150050111, P8手机, 手机, 2499, 华为) INSERT INTO Sells VALUES(20140012345678,2014-10-01,上海市,12345678,N) INSERT INTO Sells VALUES(20140012345680,2014-11-11,上海市,12345680,Y) INSERT INTO Detail VALUES(20140012345678,140010123,3) INSERT INTO Detail VALUES(20140012345680,140050234,1) INSERT INTO Detail VALUES(20140012345680,150020234,2)1、 CREATE FUNCTION F_年销售总金额(年份 smallint = 2014) RETURNS real BEGIN DECLARE 总金额 real SELECT 总金额=SUM(Quantity*Price) FROM Sells S JOIN Detail D ON S.Sno=D.Sno JOIN Goods G ON D.Gno=G.Gno WHERE YEAR(Sdate)=年份 RETURN 总金额 END GO PRINT dbo.F_年销售总金额(DEFAULT) PRINT dbo.F_年销售总金额(2015)2、 CREATE FUNCTION F_年各月份销售总金额(年份 smallint = 2014) RETURNS TABLE RETURN ( SELECT 月份, SUM(Quantity*Price) 月销售总金额 FROM ( SELECT MONTH(Sdate) 月份, Quantity, Price FROM Sells S JOIN Detail D ON S.Sno=D.Sno JOIN Goods G ON D.Gno=G.Gno WHERE YEAR(Sdate)=年份 ) AS Temp GROUP BY 月份 ) GO SELECT * FROM dbo.F_年各月份销售总金额(DEFAULT) SELECT * FROM dbo.F_年各月份销售总金额(2015)3、 CREATE PROC P_年销售总金额 年份 smallint = 2014, 总金额 real OUTPUT AS IF 年份 IS NULL RETURN 2 IF NOT EXISTS (SELECT * FROM Sells WHERE YEAR(Sdate)=年份) RETURN 1 SELECT 总金额=SUM(Quantity*Price) FROM Sells S JOIN Detail D ON S.Sno=D.Sno JOIN Goods G ON D.Gno=G.Gno WHERE YEAR(Sdate)=年份 RETURN 0 GO下面是一个执行该自定义存储过程的示例: DECLARE 返回值 smallint, 总金额 real EXEC 返回值 = P_年销售总金额 DEFAULT, 总金额 OUTPUT IF 返回值 = 2 PRINT 必须提供年份 ! ELSE IF 返回值 = 1 PRINT 该年份没有销售记录 ! ELSE PRINT 总金额 GO4、 ALTER TABLE Sells ADD Smoney decimal(12,2) DEFAULT 0 GO CREATE PROC P_计算销售单金额 AS DECLARE Sno char(14), Smoney decimal(12,2) DECLARE CUR_S CURSOR FOR SELECT Sno, Smoney FROM Sells OPEN CUR_S FETCH NEXT FROM CUR_S INTO Sno, Smoney WHILE fetch_status=0 BEGIN SELECT Smoney = SUM(Quantity*Price) FROM Detail D JOIN Goods G ON D.Gno = G.Gno WHERE Sno = Sno UPDATE Sells SET Smoney = Smoney WHERE CURRENT OF CUR_S FETCH NEXT FROM CUR_S INTO Sno, Smoney END CLOSE CUR_S DEALLOCATE CUR_S GO执行下列三句语句,可以验证存储过程的功能: UPDATE Sells SET Smoney = 0 EXEC P_计算销售单金额 SELECT * FROM Sells5、 CREATE TRIGGER T_客户信息 ON Customers AFTER INSERT AS DECLARE Email varchar(30) SELECT Email = Email FROM inserted IF charindex(, Email) = 0 BEGIN RAISERROR (事务将被取消,电子邮箱中缺少“”字符 !, 10, 2) ROLLBACK TRANSACTION END GO执行下列语句可验证触发器的功能: INSERT INTO Customers VALUES(12345684,陈嫣红,女,28,杭州市,13612345684,yhchen163.com)6、 CREATE TRIGGER T_修改销售单金额 ON Detail FOR UPDATE AS IF rowcount 0 BEGIN DECLARE Sno_d char(14), Gno_d char(9), Quantity_d smallint DECLARE Sno_i char(14), Gno_i char(9), Quantity_i smallint DECLARE Price decimal(9,2) DECLARE CUR_新数量 CURSOR FOR SELECT Sno, Gno, Quantity FROM inserted DECLARE CUR_旧数量 CURSOR FOR SELECT Sno, Gno, Quantity FROM deleted OPEN CUR_新数量 OPEN CUR_旧数量 FETCH NEXT FROM CUR_新数量 INTO Sno_i, Gno_i, Quantity_i FETCH NEXT FROM CUR_旧数量 INTO Sno_d, Gno_d, Quantity_d SELECT Price = Price FROM Goods WHERE Gno = Gno_i WHILE fetch_status=0 BEGIN UPDATE Sells SET Smoney=Smoney+Price*(Quantity_i-Quantity_d) WHERE Sno=Sno_i FETCH NEXT FROM CUR_新数量 INTO Sno_i, Gno_i, Quantity_i FETCH NEXT FROM CUR_旧数量 INTO Sno_d, Gno_d, Quantity_d SELECT Price = Price FROM Goods WHERE Gno = Gno_i END CLOSE CUR_新数量 CLOSE CUR_旧数量 DEALLOCATE CUR_新数量 DEALLOCATE CUR_旧数量 END GO执行下列语句可验证触发器的功能: UPDATE Detail SET Quantity = 2 WHERE Sno = 20140012345678 AND Gno = 140010123第七章一、单项选择题ADBCC DDAAC BBDCA DAC二、填空题1、隔离性,原子性,持久性2、已提交,已中止3、自动提交4、读脏数据5、二6、先来先服务,一次,顺序7、隐式8、自上而下,自下而上9、高,低10、隔离级别,锁定提示11、冗余,冗余数据,冗余数据12、数据转储,登记日志13、事务故障,系统故障14、完全差异,事务日志15、完全,大容量日志16、内容,频率17、物理,逻辑18、逻辑备份设备,sp_addumpdevice三、简答题1、所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务具有ACID四个特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability )。原子性表示事务中包含的数据库操作要么都做,要么都不做。这一性质即使在系统发生各种故障之后仍能得到保证。一致性保证事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。隔离性表示一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰,即每个事务都感觉不到系统中有其他事务在并发地执行。持续性指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。2、在 SQL Server 2005中,可以通过显式、自动提交或隐式三种模式来管理事务。只要用户使用显式事务模式,就按显式事务模式处理。若用户不使用显式事务模式,就按语句SET IMPLICIT_TRANSACTIONS ON | OFF 来管理事务模式,该设置的默认值为OFF。当设置为ON时,被设置为隐式事务模式;当设置为OFF时,返回到自动提交事务模式。默认情况是自动提交事务模式,即每个T-SQL语句在完成时,都被提交或回滚。在隐式事务模式下,用户无须描述事务的开始,只需提交或回滚每个事务。3、多个事务并发执行的好处是:(1)提高吞吐量和资源利用率;(2)提高响应速度和减少等待时间。但多个事务并发运行时,如果对并发操作不加控制,可能会产生丢失修改、读“脏”数据和不可重复读(包括幻影)三种典型的数据不一致性。4、幻影现象有两种情况:(1)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失了。(2)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。5、多个事务的并发执行是正确的,当且仅当其结果与按某一顺序串行地执行这些事务时的结果相同,称这种并发调度为可串行化调度。一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。6、所谓封锁就是事务T在对某个数据对象(如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制。基本的封锁类型有两种:排他锁(简称X锁)和共享锁(简称S锁)两种。(1)排他锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁为止。(2)共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁为止。7、一级封锁协议是指事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。如果事务仅仅是读数据而不对其进行修改,则不需要加锁。二级封锁协议是指在一级封锁协议基础上增加事务T在读取数据R前必须先加S锁,读完后即可释放S锁。三级封锁协议是指在一级封锁协议基础上增加事务T在读取数据R前必须先加S锁,直到事务结束才释放。一级封锁协议可防止丢失修改,不能保证不读“脏”数据和可重复读。二级封锁协议除了可防止丢失修改外,还可进一步防止读“脏”数据,不能保证可重复读。三级封锁协议可防止三种典型的数据不一致性。8、死锁就是两个或多个事务竞争对相同资源的控制权而相互无限制的等待。预防死锁的方法通常有一次封锁法和顺序封锁法两种。诊断死锁的方法通常有超时法和事务等待图法两种。并发控制机制检测到系统中存在死锁后就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去。9、封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;反之,封锁的粒度越小,并发度较高,但系统开销也就越大。如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁。通过选择适当的封锁粒度来平衡封锁开销和并发度两个因素,以求得最优的效果。10、意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如果没有意向锁,那么系统在对某个数据对象加锁时,系统要检查该数据对象上有无显式封锁与之冲突;再检查其所有上级结点,看本事务的显式封锁是否与该数据对象上的隐式封锁冲突;还要检查其所有下级结点,看它们的显式封锁是否与本事务的隐式封锁冲突
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!