收藏 分享(赏)

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

上传人:tangtianxu1 文档编号:3106115 上传时间:2018-10-03 格式:DOC 页数:20 大小:269KB
下载 相关 举报
数据库原理与实践教材练习题答案.doc_第1页
第1页 / 共20页
数据库原理与实践教材练习题答案.doc_第2页
第2页 / 共20页
数据库原理与实践教材练习题答案.doc_第3页
第3页 / 共20页
数据库原理与实践教材练习题答案.doc_第4页
第4页 / 共20页
数据库原理与实践教材练习题答案.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、第 1 页第一章一、单项选择题DBDCD ABBCC CADAD二、填空题1、文件系统2、层次模型的 IMS 系统,网状模型的 DBTG 报告,E.F.Codd3、数据的完整性,并发控制4、操作系统,数据库管理系统5、内三、简答题1、数据处理是指信息的收集、管理、加工、传播等一系列活动的总和。数据管理是指对数据进行分类、组织、编码、存储、检索和维护。数据管理是数据处理的基本环节,是任何数据处理业务中必不可少的共有部分,是数据处理的中心问题。2、数据库技术的特点:(1)数据整体结构化,数据的共享性高,冗余度小; (2)程序与数据之间的独立性高;(3)数据得到统一管理和控制。数据的整体结构化是数据

2、库技术的主要特征之一,也是数据库系统与文件系统的根本区别。文件系统是数据库技术的基础,因为数据库技术中对数据库的读写操作最终还是通过文件系统去实现的。3、尽管有各种各样的信息系统,但它们的主要功能都是进行信息处理(即数据处理) ,而数据处理都涉及到数据的管理问题。如果数据的管理由各个信息系统自己去实现,不但耗时耗钱,而且系统的稳定性、可靠性、安全性、响应时间都不能得到保证。因为数据管理软件的编写是一项专业性很强的工作,不是一般的程序员可以胜任的。采用数据库技术后,数据的管理就由 DBMS 去完成,而 DBMS 是专业公司开发的,系统的稳定性、可靠性、安全性、响应时间都有保证,而且缩短了系统的开

3、发时间,节约了成本。4、数据库系统是引入了数据库技术后的计算机系统,一般由数据库、数据库管理系统(及其开发工具) 、数据库应用系统、数据库管理员(DBA)构成。DBA 是数据库系统中最重要的一类人员。具体职责包括:(1)决定数据库中的信息内容和结构; (2)决定数据库的存储结构和存取策略;(3)定义数据的安全性要求和完整性约束条件; (4)监控数据库的使用和运行;(5)数据库的改进和重组。5、目前最常见的商用 DBMS 有:Oracle 、DB2、SQL Server、MySQL 等。DBMS 一般有六大功能:(1)数据定义功能;(2)数据组织、存储和管理;(3)数据操纵功能;(4) 数据库的

4、运行管理和事务管理;(5)数据库的建立和维护功能。6、模式是数据库中全体数据的逻辑结构和特征的描述,是全体用户数据的最小并集。数据库模式以某一种数据模型为基础,综合考虑了所有用户的需求,并将这些需求有机地结合成一个逻辑整体。一个数据库只有一个模式。外模式是用户的数据视图,是用户可看见和使用的局部数据逻辑结构和特征的描述,是与某一具体应用有关的数据的逻辑表示。显然,外模式是模式的子集,且可以有多个。内模式是数据库中数据的物理结构和存储方法的描述,是数据在数据库内部的表示方式。内模式负责定义所有数据的物理存储策略和访问控制方法。一个数据库只有一个内模式。7、数据库系统采用外模式、模式、内模式三级模

5、式结构,三级模式是对数据的三个抽象级别,它把数据的具体组织留给 DBMS 管理,使用户能逻辑地抽象地处理数据,而不必关心数据在计算机中的具体表示方式和存储方式,不必考虑存取路径等细节。DBMS 在这三级模式之间提供了两层映像:外模式/模式映像、模式/ 内模式映像。正是这两层映像保证了第 2 页数据库系统中的数据具有较高的逻辑独立性和物理独立性。另外,外模式是数据库安全性的一个有力措施,模式实现了数据的共享,减少了数据的冗余。8、程序与数据的逻辑独立性是指当模式改变时,可由数据库管理员改变外模式模式映像,使得每个外模式保持不变,而应用程序是根据外模式编写的,从而不必修改应用程序。程序与数据的物理

6、独立性是指当内模式改变时,可由数据库管理员改变模式/内模式映像,使得模式保持不变(外模式当然也不变) ,从而不必修改应用程序。第二章一、单项选择题BDACA BDCBB ABDAB DBDAD二、填空题1、模拟现实世界2、数据结构3、逻辑模型4、实体5、多对多6、网状模型,面向对象模型7、指针8、关系9、候选码10、实体完整性,参照完整性三、简答题1、概念模型具有较强的语义表达能力,能够方便、直接地表达应用所涉及到的现实世界中的各种语义知识,另一方面它概念简单、清晰,易于用户理解,且不依赖于具体的计算机系统。概念模型主要用于数据库设计,是用户与数据库设计人员之间进行交流的桥梁。2、表示概念模型

7、最常用的方法是用 E-R 图来表示概念模型,这种概念模型也称 E-R 模型。画 E-R 图的步骤:(1)确定实体;(2)确定各实体的属性;(3)确定实体之间的联系;(4) 确定各联系的属性。3、非关系模型中实体之间的联系是通过指针来实现的,因此查询效率较高。缺点是数据结构复杂,不易理解,编程也复杂。关系模型的优点是:有严格的理论基础,概念单一;数据结构简单、清晰、用户易理解;存取路径对用户透明,程序与数据的独立性高,易于应用程序的编写和维护。缺点主要是查询效率不如非关系模型,DBMS 的开发难度高。4、在关系模型中的概念单一主要体现在数据结构单一(即现实世界中实体以及实体之间的各种联系都用关系

8、来表示) ,而数据结构单一又带来操作符的统一。操作符的统一体现在无论是插入(或删除修改)一个实体值还是插入(或删除修改)一个联系值,操作的命令是相同的(不像 DBTG 中用 STORE 插入实体值,用 CONNECT 插入联系值) ,这大大方便了用户的使用。5、所谓存储路径对用户透明就是指用户不需要知道数据的物理结构和存储方式。优点:因为存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,简化了程序员的工作。缺点:因为存取路径对用户透明,导致查询效率不如非关系系统,增加了开发DBMS 的难度。第 3 页6、关系模型中有三类完整性约束,包括实体完整性、参照完整性和用户定义的完整性。其

9、中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系数据库系统自动支持。实体完整性规则:若属性 A 是基本关系 R 主码中的属性,则属性 A 不能取 “空值” 。参照完整性规则:若属性(或属性组)F 是基本关系R 的外码,它与基本关系 S 的主码 Ks 相对应(R 和 S 可以是同一个关系) ,则对于 R 中每个元组在 F 上的值必须等于 S 中某个元组的主码值或者取空值(F 的每个属性值均为空值) 。用户定义的完整性是针对某一具体的关系数据库的约束条件,它反映了某一具体应用所涉及的数据必须满足的语义要求。7、外码不是一定可以取空值的。当外码是本关系

10、主码中的属性时,外码不能取空值,如果取空值将违反实体完整性规则。例如,选修关系中的外码“学号”和“课程号”就不能取空值。所以只有当外码不是本关系主码中的属性时,外码才可以取空值。8、用户只要告诉系统操作的要求,不必告诉系统如何来完成该操作(即用户只要告诉系统“做什么” ,而不必告诉“怎么做” )的语言就是非过程化语言。9、自然连接是一种特殊的等值连接,它与等值连接的区别表现在:被连接的两个关系中进行相等比较的分量必须是相同的属性(组) ,并且要在结果中把重复的属性(组)去掉。10、例如,如果要实现查询要求“查询所有学生信息并同时查询他的选课信息” ,这时就要做学生关系与选修关系的自然连接,如果

11、有学生还没有选修过课程,那么该学生信息将会在结果关系中消失,不符合查询要求,这时就要用到左外连接。四、关系代数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 (

12、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(Custome

13、rs Sells)第三章一、单项选择题DACDB ADADB BCBAB DCDAC二、填空题1、主数据,日志2、查询速度,13、1,主4、字符数据,二进制数据5、系统,系统,数据字典,系统第 4 页6、用户,tempdb7、拒绝8、删除三、简答题1、数据定义语言(DDL)主要定义数据库的逻辑结构,包括定义基本表、索引和视图三个部分;数据操纵语言(DML )包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和修改三种操作;数据控制语言(DCL)主要有对基本表和视图的授权,事务控制语句等。2、SQL 语言的主要特点包括:(1)综合统一,即集 DDL、 DML 和 DCL 功能于一体;

14、(2)面向集合的操作方式,即操作的对象和操作的结果都是元组的集合;(3)高度非过程化,即在完成某项查询要求时,用户无需了解存取路径,只要提出“做什么” ,不必指出“怎么做” ;(4)以同一种语法结构提供两种使用方式,即独立地用于联机交互的使用方式和嵌入到高级语言中这两种不同的使用方式下,语法结构是基本上一致的;(5)支持三级模式结构。3、RDBMS 的完整性控制机制都应有完整性定义、完整性检查和违约处理这三方面的功能。4、列级完整性约束条件中涉及的属性只能是本列中的属性,而表级完整性约束条件中涉及的属性可以是本表中所有列中的属性。5、SQL 语言中,在用 CREATE TABLE 语句创建表时

15、,可以用 PRIMARY KEY 定义主码,定义主码即实现了实体完整性;也可以用 FOREIGN KEY REFERENCES 定义外码,定义外码即实现了参照完整性。6、用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。在 SQL Server中可以在列级或表级用 NOT NULL(属性取非空值) 、UNIQUE(属性取值唯一)和CHECK(检查属性值是否满足一个逻辑表达式)三种形式实现用户定义的完整性。另外,T-SQL 语言中的 DEFAULT(属性取默认值)也可以理解为列级用户定义的完整性约束。7、三种处理方式:(1)拒绝(NO ACTION)执行,即不允许执行该操作,一般为默

16、认违约处理方式。(2)级连(CASCADE)操作,表示当删除或修改被参照表的一个元组造成了参照表中某些元组的外码违反了参照完整性约束,则系统会自动删除或修改参照表中所有违反参照完整性约束的元组。(3)设置为空值(SET NULL) ,表示当删除或修改被参照表的一个元组造成了参照表中某些元组的外码违反了参照完整性约束,则系统会自动将参照表中所有违反参照完整性约束的元组的外码设置为空值。8、只有一种处理方式,拒绝(NO ACTION)执行,即不允许执行该操作。四、SQL 语言1、 CREATE TABLE Customers( Cno char(8) PRIMARY KEY ,Cname char

17、(12) NOT NULL ,Csex char(2) NOT NULL CHECK ( Csex IN (男,女) ) ,Cage tinyint NOT NULL ,Caddress varchar(50) ,Mphone char(11) NOT NULL ,Email varchar(30)CREATE TABLE Goods( Gno char(9) PRIMARY KEY ,Gname char(20) NOT NULL ,第 5 页Gtype char(8) NOT NULL ,Price decimal(9,2) NOT NULL CHECK ( Price BETWEEN 1

18、 AND 100000 ) ,Manufac char(12) NOT NULL)CREATE TABLE Sells( Sno char(14) PRIMARY KEY ,Sdate datetime 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( Sno char(14) FOREIGN KEY REFE

19、RENCES Sells(Sno) ,Gno char(9) FOREIGN KEY REFERENCES Goods(Gno) ,Quantity smallint NOT NULLCONSTRAINT 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

20、 TABLE DetailDROP CONSTRAINT ck_DALTER TABLE DetailADD 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(*),

21、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 LEF

22、T 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

23、=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 第 6 页FROM Sells WHERE Sda

24、te=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 F

25、ROM 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 (SE

26、LECT * 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 Gt

27、ype=手机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、表中每个搜索码值都有一个索引

28、项,这种索引称为稠密索引。当表按照搜索码值有序存储时,可以只为搜索码的某些值建立索引项,这种索引称为稀疏索引。稠密索引可以比稀疏索引更快地定位一条记录,但稠密索引所占用的存储空间比稀疏索引大。3、所谓聚集索引就是指表中的元组按照索引中搜索码指定的顺序排序,使得具有相同搜索码值的元组在物理上聚集在一起。显然,一张表最多只能有一个聚集索引。聚集索引往往是稀疏索引,可以只存储部分搜索码值。因为表中的元组是按聚集索引而不是辅助索引的搜索码有序存放的,所以辅助索引必须是稠密索引,对每个搜索码值都有一个索引项,包第 7 页含指向表中每个元组的指针。显然,一张表可以创建多个辅助索引。4、如果索引小到可以放在

29、内存中,那么搜索一个索引项的时间就可以忽略。但是,如果索引过大而不能放在内存中,那么当需要时,就必须从磁盘中读取索引块,于是搜索一个索引项可能需要多次读取磁盘块,是一个相当耗时的过程。所以不管是聚集索引,还是辅助索引,当索引项很多,索引很大时,实际使用的往往都是多级索引。 5、见教材 4.1.2 小节6、基本表在数据库中既要存放它的定义,又要存放它的数据。而视图是从一张或几张基本表(或视图)导出的表。与基本表不同,视图是一张虚表,在数据库中只存放视图的定义(即 SELECT 语句) ,不存放视图对应的数据(即 SELECT 语句的查询结果) 。两者的联系是视图的数据在它对应的基本表中,所以基本

30、表中的数据一旦发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,通过它用户可以看到数据库中自己感兴趣的数据及其变化。7、如果定义视图的子查询对下列条件都能满足,那么该视图是可以更新的:(1)FROM 子句中只有一个数据库关系;(2)SELECT 子句中只包含关系的属性名,不包含任何表达式、聚集函数或 DISTINCT 短语; (3)没有出现在 SELECT 子句中的属性可以取空值,也不是主码中的属性;(4)子查询中没有 GROUP BY 或 HAVING 子句。四、SQL 语言1、CREATE INDEX Index_Customers_Cname ON Cust

31、omers(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 ASSELECT * FROM Goods WHERE Gtype=手机5、CREATE VIEW GoodsPhoneHuaWei ASSELECT * FROM GoodsPhone WHERE Manufac=华为6、CREATE VIEW SellsQuantity(Gnam

32、e, Price, Manufac, Squantity) ASSELECT 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

33、, Cname, Csex, Cage, Smoney) ASSELECT 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

34、AND 2014-12-31 GROUP BY Cname, Csex, Cage HAVING SUM(Smoney)1000010、INSERT INTO GoodsPhone VALUES (150050111, P8 手机, 手机, 2499, 华为)第五章一、单项选择题BADCB CABDD二、填空题1、网络系统第 8 页2、合法权限检查机制3、自主,强制4、视图机制,审计,数据加密5、dbo,guest,dbo6、public7、数据库对象,操作类型8、Windows,混合三、简答题1、数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。数据库的完整性是指数

35、据库的任何状态变化都能反映真实存在的客观世界的合理状态,数据库中的数据应始终保持正确且合理的状态。也就是说,数据库的完整性是指数据的正确性和相容性。两者的定义已经看出两者的区别,而两者的联系主要体现在触发器机制既可以用来实现完整性,也可以用来实现安全性。2、数据库安全性控制的常用方法和技术有:1、用户标识和鉴别;2、存取控制;3、视图机制;4、审计;5、数据加密。3、在 SQL Server 中,有登录名和数据库用户两个概念。登录名是验证用户是否有权限连接到 SQL Server 服务器,数据库用户是验证用户登录服务器后是否有对服务器上的某个数据库进行操作的权限。用户必须拥有和自己登录名对应的

36、数据库用户才可以对某个数据库进行操作,这样增强了数据库的安全性,避免了一个用户在登录到服务器后可以对服务器上的所有数据库进行操作。DBA 可以用 CREATE LOGIN 和 DROP LOGIN 创建和删除登录名,用 CREATE USER 和 DROP USER 创建和删除数据库用户。4、角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的数据库用户创建一个角色,所以也可以说角色是具有相同权限的数据库用户组。对一个角色授权或收回权限适用于该角色的所有成员,因此使用角色来管理权限可以简化授权的过程。5、DBA 可以用 CREATE ROLE 和 DROP RO

37、LE 创建和删除角色,用系统存储过程sp_addrolemember 和 sp_droprolemember 为角色添加成员和从角色删除成员。6、固定角色是系统内置的(预先定义好的) ,用户不能添加、修改或删除固定角色,只能修改固定角色的成员。固定角色分为固定服务器角色和固定数据库角色两大类。固定服务器角色有八种,其成员是登录名;而固定数据库角色有十种,其成员是数据库用户。DBA可以用系统存储过程 sp_addsrvrolemember 为某个固定服务器角色添加成员,用sp_dropsrvrolemember 从某个固定服务器角色中删除成员。DBA 可以用系统存储过程sp_addrolemem

38、ber 为某个固定数据库角色添加成员,用 sp_droprolemember 从某个固定数据库角色中删除成员。第六章一、单项选择题DCBAC ACADB二、填空题1、GO2、-3、第 9 页4、多语句表值型5、游标6、T-SQL7、sp_8、VARYING9、UPDATE10、DML三、简答题1、批是一起提交给 SQL Server 服务器执行的一个或多个 T-SQL 语句的集合。由于批中的语句是作为一个整体发送给 SQL Server 服务器进行语法分析、优化、编译和执行,所以大大提高了执行效率。批也常常被用在某些事必须在前面做,或者必须与其他事分开的脚本中。2、一条 SET 语句只能给一个

39、变量赋值,而一条 SELECT 语句可以给多个变量赋值。另外,SELECT 语句也可以把查询的结果存放到局部变量中保存起来。3、关闭游标意味着释放当前数据结果集,并解除定位于游标的行上的游标锁定;关闭游标并不释放它占用的数据结构以便重新打开,但在重新打开游标之前,不允许读取和定位修改。如果一个游标名或游标变量是最后引用游标的名称或变量,则释放游标后,游标使用的任何资源也随之释放。4、存储过程是一组实现某个特定功能的 T-SQL 语句的集合,经预编译后存储在服务器上的数据库中。存储过程可以避免代码的重复,隐藏 SQL 的细节,实现对业务逻辑的封装。存储过程既提高了执行效率,又减少了网络流量,降低

40、了网络负载。另外,系统管理员可以通过对执行存储过程的权限进行限制,避免非授权用户对数据的访问,保证数据的安全性。5、触发器作为一种特殊类型的存储过程,不同于存储过程,触发器不能被显式地调用,当触发器所定义的触发事件发生时,触发器被触发而自动执行。触发器的主要作用是能够实现比参照完整性更为复杂的两张表或多张表之间的数据的完整性和一致性,从而保证表中数据的变化符合数据库设计者所确定的业务规则。触发器也可以用来实现数据库的安全性。四、SQL 语言INSERT INTO CustomersVALUES(12345678,张永斌,男,35, 上海市,13612345678,)INSERT INTO Cu

41、stomersVALUES(12345680,李元祥,男,23, 上海市,13612345680,)INSERT INTO CustomersVALUES(12345682,王雪旖,女,19, 苏州市,13612345682,)INSERT INTO Goods VALUES(140010123, 1.5 匹变频空调, 空调, 2799, 海尔)INSERT INTO Goods VALUES(140050234, B199 电信手机, 手机, 999, 华为)INSERT INTO Goods VALUES(150020234, 16G 至尊高速 TF 卡 , 存储卡, 39, 闪迪)INS

42、ERT 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)第 10 页INSERT INTO Detail VALUES(20140012345678,140010123,3)INSERT INTO Detail VALUES(20140012345680,140050234,1)INS

43、ERT INTO Detail VALUES(20140012345680,150020234,2)1、CREATE FUNCTION F_年销售总金额(年份 smallint = 2014)RETURNS realBEGINDECLARE 总金额 realSELECT 总金额=SUM(Quantity*Price)FROM Sells S JOIN Detail D ON S.Sno=D.Sno JOIN Goods G ON D.Gno=G.GnoWHERE YEAR(Sdate)=年份 RETURN 总金额ENDGOPRINT dbo.F_年销售总金额(DEFAULT)PRINT dbo

44、.F_年销售总金额(2015)2、CREATE FUNCTION F_年各月份销售总金额(年份 smallint = 2014)RETURNS TABLERETURN ( SELECT 月份, SUM(Quantity*Price) 月销售总金额FROM ( SELECT MONTH(Sdate) 月份, Quantity, PriceFROM Sells S JOIN Detail D ON S.Sno=D.SnoJOIN Goods G ON D.Gno=G.GnoWHERE YEAR(Sdate)=年份 ) AS TempGROUP BY 月份)GOSELECT * FROM dbo.F

45、_年各月份销售总金额(DEFAULT)SELECT * FROM dbo.F_年各月份销售总金额(2015)3、CREATE PROC P_年销售总金额年份 smallint = 2014,总金额 real OUTPUTASIF 年份 IS NULL RETURN 2IF NOT EXISTS (SELECT * FROM Sells WHERE YEAR(Sdate)=年份) RETURN 1SELECT 总金额=SUM(Quantity*Price)FROM Sells S JOIN Detail D ON S.Sno=D.Sno JOIN Goods G ON D.Gno=G.GnoWH

46、ERE YEAR(Sdate)=年份 RETURN 0第 11 页GO下面是一个执行该自定义存储过程的示例:DECLARE 返回值 smallint, 总金额 realEXEC 返回值 = P_年销售总金额 DEFAULT, 总金额 OUTPUTIF 返回值 = 2 PRINT 必须提供年份 !ELSE IF 返回值 = 1 PRINT 该年份没有销售记录 !ELSE PRINT 总金额GO4、ALTER TABLE SellsADD Smoney decimal(12,2) DEFAULT 0GOCREATE PROC P_计算销售单金额ASDECLARE Sno char(14), Smo

47、ney decimal(12,2)DECLARE CUR_S CURSORFOR SELECT Sno, Smoney FROM SellsOPEN CUR_SFETCH NEXT FROM CUR_S INTO Sno, SmoneyWHILE fetch_status=0BEGINSELECT Smoney = SUM(Quantity*Price)FROM Detail D JOIN Goods G ON D.Gno = G.GnoWHERE Sno = SnoUPDATE Sells SET Smoney = SmoneyWHERE CURRENT OF CUR_SFETCH NEXT

48、 FROM CUR_S INTO Sno, SmoneyENDCLOSE CUR_SDEALLOCATE CUR_SGO执行下列三句语句,可以验证存储过程的功能:UPDATE Sells SET Smoney = 0EXEC P_计算销售单金额SELECT * FROM Sells5、CREATE TRIGGER T_客户信息ON CustomersAFTER INSERTASDECLARE Email varchar(30)SELECT Email = Email FROM inserted第 12 页IF charindex(, Email) = 0BEGINRAISERROR (事务将被取消,电子邮箱中缺少 “”字符 !, 10, 2)ROLLBACK TRANSACTIONENDGO执行下列语句可验证触发器的功能:INSERT INTO CustomersVALUES(12345684,陈嫣红,女,28, 杭州市,13612345684,)6、CREATE TRIGGER T_修改销售单金额ON DetailFOR UPDATEASIF rowcount 0BEGINDECLARE Sno_d char(14), Gno_d char(9), Quantity_d

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报