《数据库原理与应用》课后习题答案_第1页
《数据库原理与应用》课后习题答案_第2页
《数据库原理与应用》课后习题答案_第3页
《数据库原理与应用》课后习题答案_第4页
《数据库原理与应用》课后习题答案_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库原理与应用(SQLSerVer2019:慕课版)习题答案

习题一数据库系统概述

一、选择题

1-5.BCAAA6-10.DBDBA11-15.BABDC16-20.CDABD

二、填空题

1.数据库系统2.数据库3.逻辑数据模型4.概念5.物理模式/存储模式6.多对多7.元

组8.外模式/模式映像9.上下分层/树状10.数据操纵11.硬件12.网状模型13.实体

14.关键字/码15.数据库16.网状模型17.E-R图/E-R模型18用户19.文件20.型

三、实践题

3

解:(I)ER图如图5.2所示。

公司

1

N

职工

图5.2

(2)这个ER图可转换3个关系模式:

公司(公司编号,公司名,地址)

基地(基地编号,基地名,地址,公司编号)

职工(职工编号,姓名,性别,基地编号,聘期,工资)

习题二关系数据库数学模型

一、填空题

1-5BDABC6-10ABDBB1I-15CBDAD16-20BDDBD

二、选择题

1.242.集合论3.外键4.实体完整性5.不能

6.BCNF7.学号8.全外连接9.关系10.关系模型

11.自然连接12.关系13.子集14.θ连接15.参照

16.关系/集合17.候选码18.关系模式19.SQL

三、计算题

ABC

IIJZ

ɪ:JZ

IJZ

TZJZ

d5h

b_4____f

g_8_e

(3)R3={YZVU∣(3X)(S(XYZ)ΛW(UV)ΛY≤6ΛV=7)}

BCED

6E7e

5h7_e

4f7e

习题三关系数据库的规范化理论

一、选择题

1-5.ΛBDAB6-10BDΛΛB11-15.BCBBC16-20.BCBBD21-24.BAAAA

二、填空题

L无损连接2.数据冗余3.传递律4.自反律、5.冗余度大6.第一范式7.2NF

8.BCNF9.单一属性K).3NF11.数据依赖12.系主任13.BCNF14.3NF

15.传递16.增广律Γ7.(A,C)18.平凡的多值依赖19.BCNF20完全

三、计算题

1.

(1)主码:(教师号、课程号)

(2)第一范式,因为存在部分函数依赖

(3)分解结果为:

教师(教师号,姓名,职称)

课程(课程号,课程名,学分,教科书名)

授课(教师号,课程号)

2.

因为R∣∩Rz=A,R1-R2=BC,AfBC属于F,故RARzfR-Rz,所以该分解具有无损连接性。

3.

解:初始化P={R}

求得候选关键字为{SNO,CNO}O首先从R中分解出关系(TN0,DNAME),得

P={Rl(TNO,DNAME),R2(SNO,CNO,SCORE,TNO)}

其中Rl为BCNF,R2不是BCNF

再求出R2的候选关键字为{SNO,CNO),从R2中分解出关系(CNo,TNO),则P={Rl(TNO,

DNAME),R3(CNO,TNO),R4(SCO,CNO,SCORE)}

RkR3、R4都属于BCNF,分解完成。

4.

解:R(ABCD),F={A→C,CfB}

AD-A,AD-D

由A→C,CfB知AfB

所以ADfB,AD-*C

AD→ABCD

主键是AD

5.

证明:即求CE关于函数依赖集F的闭包。

(1)X'0,=CE(2)X⑴=CEDAPD=ACDEP(3)X⑵=ACDEPUB=ABCDEP=U

因为B包含在CE的属性闭包中,所以CE-B为F所蕴含。也可这样证:

因为E-A,根据自反律和传递律有CEfA

又因为A-B,根据传递律有CE-B

6.

(1)写出关系模式S的基本函数依赖和主码。

答:关系模式S的基本函数依赖如下:

学号f姓名,系别名一系主任名,学号一系别名,(学号,课程)f成绩

关系模式S的码为:(学号,课程)。

(2)原关系模式S为几范式?为什么?分解成高一级范式,并说明为什么?

答:原关系模式S是属于INF的,码为(学号,课程),非主属性中的成绩完全依赖于码,

而其它非主属性对码的函数依赖为部分函数依赖,所以不属于2NF。

消除非主属性对码的函数依赖为部分函数依赖,将关系模式分解成2NF如下:

Sl(学号,姓名,系别名,系主任名)

S2(学号•,课程,成绩)

(3)将关系模式分解成3NF,并说明为什么?

答:将上述关系模式分解成3NF如下:

关系模式Sl中存在学号一系别名,系别名一系主任名,即非主属性系主任名传递依赖

于学号,所以Sl不是3NF。进一步分解如下:

SΠ(学号,姓名,系别名)

S12(系别名,系主任名)

分解后的关系模式Sll、S12满足3NF。

对关系模式S2不存在非主属性对码的传递依赖,故属于3NF。所以,原模式S(学号,

姓名,系别名,系主任名,课程,成绩)按如下分解满足3NF。

Sll(学号,姓名,系别名)S12(系别名,系主任名)

S2(学号,课程,成绩)

7.

(1)它为第几范式?为什么?

解:它是2NF。因为R的候选关键字为“课程名”。

依赖关系:课程名、教师名,教师名一课程名,教师名一教师地址,所以课程名一

教师地址。即存在非主属性“教师地址”对候选关键字课程名的传递函数,因此R不是3NF。

但:因为不存在非主属性对候选关键字的部分函数依赖,所以R是2NF。

(2)是否存在删除操作异常?若存在,则说明是在什么情况下发生的?

解:存在。当删除某门课程时会删除不该删除的教师的有关信息。

(3)将它分解为高一级范式,分解后的关系是如何解决分解前可能存在的删除操作异常

问题?

解:分解为高一级范式如图所示。

RlR2

课程名教师名教师名教师地址

COl江万里江万里DOl

C02陈耀星陈耀星DOl

C03祝燕飞祝燕飞D02

C04卫国防卫国防DOl

分解后,若删除课程数据时,仅对关系RI操作,教师地址信息在关系R2中仍然保留,

不会丢失教师方面的信息。

8.

学号姓名年龄性别系号系名学号姓名年龄性别系号系名

Slol赵敏18女01通信S301李丽21男03计算机

S201钱锐19女02电子S304周欢20女_03计算机

S202孙阳20男02电子S305吴浩19男03计算机

试问S是否属于3NF?为什么?若不是,它属于几范式?并将其规范化为3NF.

解:S不属于3NF,它属于2NF。

S的候选关键字为“学号”。

依赖关系:学号一系号,系号一系名,系号'学号

所以:学号一系名,即存在非主属性系名对候选关键字“学号”的传递依赖,S不是3NF.

在S中所有非主属性均依赖于码学号,所以S是2NF。将S分解成:Sl(学号,学生

名,年龄,性别,系号)、S2(系号,系名),分解后的Sl与S2如图所示:

关系模式Sl如下:______关系模式S2如下_______

学号学生名年龄性别系号系号系名

SlOl赵敏18女0101通信

S201钱锐19女0202电子

S202孙阳20男0203计算机

S301李丽21男03系号系名

S304周欢20女03

S305吴浩19男03

关系模式SI、S2上无传递依赖,它们是3NF.

9.

试问R属于3NF?为什么?若不是,它属于第几范式?并如何规范化为3NF?

解:R不属于3NF,它是2NF。

R的候选关键字为职工号和职工名,而:

职工号f单位号,单位号、职工号,单位号一单位名.所以,职工号一单位名,即存

在非主属性“单位名”对候选关键字职工号的传递函数依赖,所以R不是3NF,规范化后

的关系子模式为如下图。

Rl如下:R2如下

职工号职工名年龄性别单位号位号单位名

ElZS20FD3D3CCC

E2QF25MDlDlAAA

E3SD38MD3

E4LL25FD3

习题四数据库的创建与管理

一、选择题

1-5.BCDDB6-10.ADBAA11-15.BCABDI6-20.BBADD21-25.CBCAA

26-28.ABA

二、填空题

Lsa2.客户端3.表4.核心5.DTS6.登录账户7.本地计算机名8.系统管理员

9.逻辑结构10.暂停II.服务器12.配置管理器13.SSMS14.sql15.msdb

16.用户数据库17*.ldf18.mn19.数据20.数据库设置21.附加22.分离23.sqlos

24.主文件组/primary25.8M

三、实践题

1.

createdatabaseIx

on

(name=lx_data,filename='d:\stu\lx_data.nidf,size=5,maxsize=10,filegrowth=1),

filegroupdx(

,

name=sx-data,filename=dAstu∖sx-data.mdf)

logon

(name=lx」og,filename='d:\stu\lx_JOgJdf',size=2,maxSiZe=Io,filegrowth=5%)

2.

(1)

alterdatabaseIxaddfilegroupdy

g。

alterdatabaseIx

addfile

(name=dya,filename=,dAstu∖dya.ndf),

(name=dyb,filename=,dAstu∖dyb.ndf)

tofilegroupdy

(2)

alterdatabaseIx

addlogfile

(name=dya_log,filename='d:\stu\dya_log.ldf,size=l,maxsize=unlimited),

,

(name=dyb-log,filename=dΛstu∖dyb-log.Idf,size=l,maxsize=unlimited)

3.

(1)alterdatabaseLXremovefiledya

go

(2)alterdatabaseLXremovefiledyb_log

go

(3)alterdatabaseLXremovefiledyb

go

alterdatabaseLXremovefilegroupdx

4.

createdatabaselibrary

on(

name=Iib

filename=,d:\stud\lib_data.mdf,),

(name=Iiba_data,

filename=,d:\stud\liba_data.ndf,

),

filegroupgroup2

(name=libb_data,

filename=,d:\stud\libb_data.ndf,),

filegroupgroup3

(name=libjdata,

filename=,d:\stud\libc_data.ndf,),

filegroupgroup4

(name=Iibd_data,

filename=,d:\stud\libd_data.ndf,)

logon(

name=Iiba_log,

filename=,d:\stud\liba_log.Idf,),

(

name=libb_logz

filename=,d:\stud\libb_log.Idf,)

5.补充题目

使用T-SQL语句删除数据库数据库library,然后重新在D盘的Iib目录下创建数据库library,

要求如下。

(1)主文件逻辑名为lib_data,物理名为lib_data.mdf,其他属性取默认值;

(2)日志文件逻辑名为lib_log,物理名为lib_log.ldf,其他属性取默认值;

use

createdatabaselibrary

on(

name=lib_data,

filename=,d:\lib\lib_data.mdf,)

logon(

name=Iibjog,

filename=P:\lib\lib_log.Idf')

习题五表的创建与管理

一、选择题

1-5.CDBBC6-10.DADBCH-15.ADBDC16-20.DBCBB21-25DCCCC

二、填空题

1.参照2.主键3.NULL4.用户5.tempdb6.空格7.删除8.字段9.checkIOunique

三、实践题

1.

(1)

uselibrary

go

createtable图书(

图书编号char(6)notnullprimarykey,

书名varchar(20)notnull,

类别char(12),

作者varchar(20),

出版社VarChar(20),

出版日期datetime,

定价money)

(2)

uselibrary

createtable读者(

读者编号char(4)notnull,

姓名char(6)notnull,

性别char(2),

单位varchar(20),

电话VarChar(13),

类型编号intnuIL

已借数量intnull)

2.

(1)

uselibrary

go

createtable读者类型(

类型编号intnotnull,

类型名称char(6)notnull,

限借数量intnotnull,

借阅期限int

)

(2)

uselibrary

createtable借阅(

读者编号char(4)notnull,

图书编号Char(6)notnull

foreignkeyreferences图书(图书编号),

借书日期datetimenotnull,

还书日期datetime)

(3)

uselibrary

go

altertable读者

addconstraintpk_读者一读者编号

primarykey(读者编号)

go

(4)

altertable读者

addconstraintck_读者_性别CheCk(性别='男'or性别='女)

(5)

altertable借阅add串号varchar(10)ConStraintPk_借阅—串号primarykey

-SQLServer2000环境下请执行以下代码

altertable借阅add串号Varchar(IO)

go

altertable借阅altercolumn串号varchar(10)notnull

go

altertable借阅addconstraintpk—借阅—串号Primarykey(串号)

(6)

altertable借阅

addconstraintdf_借阅—借书日期

defaultgetdate()for借书∣Ξ∣期

(7)

altertable借阅

addconstraintfk_借阅_读者编号

foreignkey(读者编号)references读者(读者编号)

(8)

altertable借阅

addconstraintUk_借阅

UniqUe(图书编号,读者编号)

go

3.

4use1ibrary

createtype编号fromvarchar(20)notnull

习题六数据操作与SQL语言

一、选择题

1-5.CCBAB6-10.BBDDB11-15.DCADB16-20.BCCCA21-25ADDCC26-30CDCCC

二、填空题

!.update2.where3.[Λ]4.union5.交叉连接6.into7.groupby8.revoke9.orderby

10.groupby11.and12.where13.相关14.交叉连接15.all16.where17.distinct

18.from19.嵌套20.truncatetable

三、实践题

1.

select*from读者

2.

selectdistinct类别from图书

3.

select*from借阅where读者编号=IOOr

4.

Select书名,作者from图书where出版社=精华大学出版社’

5.

Select*from图书where书名Iike‘%程序设计%'

6.

Select*from图书where出版社二精华大学出版社Prderby定价

7.

Selecttop3图书编号,定价from图书orderby定价desc

8.

Selecttop3读者.读者编号,借书日期

from借阅,读者,图书

where借阅.读者编号二读者.读者编号

and借阅.图书编号=图书.图书编号

and书名='C程序设计orderby借书日期desc

9.

Selectcount(*)as藏书数量from图书

10.

Selectsum(定价)from图书

11.

select出版社,count(*)as图书数量

from图书groupby出版社

12.建议将教材上的日期修改为'2021-10-1,andj2022-10-1,

Select读者编号,count(*)from借阅

where借书日期between'2021-10-Γand,2022-10-Γ

groupby读者编号

13.建议将教材上的日期修改为‘2021-10-1,and42022-10-1'

select*from借阅where图书编号=(select图书编号from图书where作者='谭浩

强')and借书日期betweenς2021-10-Γandς2022-10-l,

SeleCt借阅.*from借阅,图书

where借阅.图书编号=图书.图书编号and图书.作者=,谭浩强’

and借书日期between,2021-10-Γand,2022-10-l,

14.

Selectmax(已借数量),min(已借数量),avg(已借数量)from读者

优化答案:

update读者set已借数量=(

selectcount(*)from借阅where借阅.读者编号二读者.读者编号groupby读者编号)

go

SeleCtmaX(已借数量)as最多借阅数,min(已借数量)as最少借阅数,

avg(已借数量)as平均借阅数from读者

15.

SeIeCt单位,max(已借数量),min(已借数量),avg(已借数量)from读者groupby单位

16.

Select读者编号,count(*)as借阅数量from借阅groupby读者编号having

count(*)>=2

17.

selectcount(*)as馆藏数量,作者intoauthorfrom图书groupby作者having

count(*)>-all(selectcount(*)from图书groupby作者)

18.

Select*,'日'from读者类型

19.

select姓名,性别,'教师’as身份from读者Where性别‘男‘and读者类型二1

union

select姓名,性别,‘学牛.'as身份from读者where性别‘男‘and读者类型二2

拓展题目:

(14)使用集合查询,查询只是读者编号“1001”借阅了,而读者编号“1004”没有借阅的

图书编号。

select图书编号from借阅where读者编号=,100Γ

except

select图书编号from借阅where读者编号=,10041

拓展题目:

(15)使用集合查询,查询读者编号“1001”和读者编号“1004”都借阅的图书编号。

select图书编号from借阅where读者编号二'1001'

intersect

select图书编号from借阅where读者编号二'1004'

20.

Select*from读者一相关子查询

whereexists(select*from借阅where读者编号二读者.读者编号)

―或者

Select*from读者一不相关子查询

where读者编号in(SeleCt读者编号from借阅)

21.

select*from读者--相关子查询

wherenotexists(select*from借阅where读者编号读者.读者编号)

---或者

select*from读者--不相关子查询

where读者编号notin(select读者编号from借阅)

22.

select*from图书

where定价>all(selectavg(定价)from图书)

拓展题目:

(22)使用嵌套查询,查询作者所著图书的平均定价大于所有图书的平均定价的作者。

select作者,avg(定价)as作者所著图书的平均定价from图书groupby作者

havingavg(定价)>(selectavg(定价)as所有图书的平均定价from图书)

23.

select*from图书

where出版社=,高等教育出版社,and定价>all(selectavg(定价)from图书)

拓展题目:

(23)查询各出版社出版的定价高于其所有图书的平均定价的图书信息。

Select*from图书a

where定价"selectavg(定价)from图书bwherea.出版社二b.出版社)

24.

select读者.读者编号,读者.姓名、借阅.图书编号,借阅.借书日期

from读者,借阅

Where读者.读者编号借阅.读者编号and借阅.图书编号,TPOOOΓ

and借阅.借书日期1(select借书日期from借阅where图书编号,TPOOOΓ)

go

一或者,但不建议使用

selecttop1读者.读者编号,读者.姓名,借阅.图书编号,借阅.借书日期

from读者,借阅

Where读者.读者编号借阅.读者编号and借阅.图书编号,TPOOOΓ

orderby读者.读者编号desc

25.

select*from读者

whereexists(select*from借阅,图书

where借阅.读者编号二读者.读者编号and图书.图书编号二借阅.图书编号

and书名’数据库原理')

一或者

SeIeCt读者.*from读者,借阅,图书

where借阅.读者编号读者.读者编号and图书.图书编号借阅.图书编号

and书名’数据库原理’

一或者

select*from读者

where读者编号in(

select读者编号from借阅where图书编号

in(select图书编号

from图书where书名’数据库原理')

一或者

select*from读者

whereexists(select*from借阅

whereexists(select*from图书

where借阅.读者编号读者.读者编号and图书.图书编号借阅.图书编号

and书名二’数据库原理'))

26.

select*from读者

where读者编号in(select读者编号from借阅

groupby读者编号havingcount(*)>==2)

27.

select图书编号,书名from图书

where图书编号in(select图书编号from借阅

groupby图书编号havingcount(*)>=2)

28.

select单位,count(单位)读者总数from读者groupby单位

29.

select读者编号,姓名,单位from读者where单位,管理学院,

go

selectcount(*)from读者where单位=,管理学院,

30

select读者编号,姓名,单位from读者Where单位,管理学院,

go

select单位,count(*)from读者Where单位=,管理学院,groupby单位

31

select*from读者awhere已借数量<(

selectmin(已借数量)from读者bwherea.读者类型二b.读者类型)

一非嵌套语句

selectcount(*)as已借数量/读者编号intojietfrom借阅groupby读者编号

go

selectmin(jiet,已借数量)from读者,jietwhere读者.读者编号=jiet.读者编号

and读者类型=1

go

selectmin((jiet.已借数量)from读者,jietwhere读者.读者编号=jiet.读者编号

and读者类型=2

32

select*from读者where已借数量>(selectavg(已借数量)from读者)

习题七T-SQL程序设计

一、填空题

1,全局变量2.注释语句3.select语句4.单引号5,表达式6.break7.68.max()

9.waitfor10.end11.syscomments12.ςab,13.字符型14.T-SQL15.GO16.print

17.Unicode18.内嵌表值19.smalldatetime20.Smallmoney

二、选择题

1-5DCBDA6-10DCDBD11-15ACBDB16-20.BDBAB21-25.DCCBC26-30DDCDC

三、实践题

1.

usejxgl

createtableintro_paper(

工号char(6),

姓名char(6),

人数intCheCk(人数>=0and人数<=20),

工作量as

case

when人数<8then12*人数

when人数vl5then12*8+6*(人数-8)

else12*8+6*7+3*(人数-15)

end

)

2.

uselibrary

createtablebook_shop(

原价float,

实际应付金额as

case

when原价V=IOOthen原价*1

when原价v=500then原价*0.9

else

原价*0.85

end)

拓展题目:改用函数的求解方法如下

一方法一:

uselibrary

createfunctiondbo.discount(@xfloat)

returnsfloat

as

begin

declare@yfloat

if@XV=IOo

set@y=@x

elseif(α)x<=500

set@y=@x*0.9

else

set@y=@x*0.85

return@y

end

selectdbo.discount(l19.20)

一方法二:

uselibrary

createfunctiondbo.discount(@xfloat)

returnsfloat

as

begin

declare@yfloat

set@y=@x*

case

when@x<=100then1

when(3)x<=500then0.9

else

0.85

end

return@y

end

go

selectdbo.discount(l19.20)

3.

uselibrary

go

createfunctiondbo.quadsum(@nint)

returnsbigint

as

begin

declare@iint,(3)sumbigint

set@i=l

set@sum=0

while@i<=@n

begin

set@SUm=@SUm+@i*@i

set@i=@i+l

end

return@sum

end

4.

declare@itinyint,@jtinyint

set@i=l

while@i<=4

begin

set@j=2*@i-l

printspace(20-2*@i)+replicate(**,,(3)j)

set@i=@i+l

end

5.创建一个函数,实现根据读者编号查询读者的姓名、性别,及其借阅信息,如图书名称、

借还日期等信息。

useIibraiy

createfunctiondbo.duzhe_finfo(@DZBhchar(4)-100Γ)

returnstable

as

retum(

select姓名,性别,书名,借书日期,还书日期from读者,借阅,图书

where读者.读者编号二借阅.读者编号and

图书.图书编号=借阅.图书编号and读者.读者编号=@dzbh)

6.

uselibrary

go

uselibrary

go

createfunctiondbo.IUShU_info(@tSbhchar(6))

returns@total_tushutable(

书名VarChar(20),出版社VarChar(20),作者VarChar(20),定价money)

as

begin

insert@total_tushu

select书名,出版社,作者,定价

from图书

where图书编号=@151加

return

end

go

select*fromdbo.tushu-info('TP000Γ)

习题八视图、索引和游标

一、选择题

1-5.ACBAD6-10.AAADC11-15ABBAD16-20.DABAB21-25.ABAAC26-30.AACAD

31-34.BBBC

二、填空题

1.基表2.select3.withcheckoption4.基表数据5.更新

6.计算列7.更新8.查询定义9.110.unique

11.1612.主键聚集13.索引14.查询15.唯一

16.客户端17.只进游标18.open19.Scroll20.fetch

三、实践题

1.

.在Iibrary数据库中,创建一个视图borrowJnform,该视图引用''读者"表中女生的读者

编号、姓名、性别、已借数量。

uselibrary

go

createviewborrow_inform

as

select读者编号,姓名,性别,已借数量

from读者

where性别-,女,

go

2.

在library数据库中,查询视图borrowjnform,并显示其中所有数据。然后与查询语句:select

读者编号,姓名,性别、已借数量from读者Where性别=,女,的查询结果的进行比较。

select*fromborrow_inform

两者运行结果一样,除了列数相同以外,行数一致。

•Solutionl□×

SQLQuery2.sql-S...ministrator(51))*七X

select*fromborrow_inform

go

-select读者编号,姓名,性别,已借数量一

from读者where性别二'女'

≡结果画消息

读者编号姓名性别已借数量

1003何立锋女

1_________1

21005周士杰女2

31007张涵韵女NULL

41009罗国明女1

读者编号姓名性别已借数量

11003何立锋女1

21005~周士杰女2

31007张涵韵女NULL

41009罗国明女1

e⅞¾已硼执行。SHU川(5.0RTM)SHUWXAdministrator(51)Iibrary00:00:004行

3.在library数据库中,插入视图borrow_inform,执行insertintoborrow_inform(读者编号,

姓名,性别)values('1011;郝淑敏?女')操作后,观察

select*from读者where读者编号‘1011'

go

select*fromborrowinformwhere读者编号‘1011'

的运行结果并解释异同。

两者都显示新增加了的数据行,因为视图插入是间接对表的操作。

insertintoborrow_inform(读者编号,姓名,性别)vaɪt

go

electfrom读者where读者编号’1011'

select>fromborrowinformwhere读者编号,1011,∣

ɪoo%∙<S»

期结臬水涓息

法者编号姓名性别单位电话读者类型已借的It

111011I郝或鞅女ITOLLSULLMILLMULL

谈者编号姓名性别已借散量

1IIeIM]:梆读女ITOLL

O⅞⅞E⅞⅜M.SH川U(15.0RTM)SHUJUXAdminiStratOr(56)Iibrary00:00:002行

4.

在library数据库中,更新视图borrow_inform,执行updateborrow_informset性别='男'where

读者编号”01「操作后,观察

select*from读者where读者编号‘1011'

go

select*fromborrowinformwhere读者编号二'1011'

两者均显示了更新,其中视图borrowinform不再显示读者编号为‘1011'的读者。

Solutionl-实践0833∙sql-SHUJUJibrary(SHUJUXAdministrator(56))*

5ζ⅛08-3-3.sql-SH...ministrator(56))**X.

updateborrow_informset性别-'男'where读者编号'1011'÷

go

selectfrom读者where读者编号,101Γ

go

selectfromborrow_informwhere读者编号‘1011'

1∞%▼<►

曲结果戌消息

修有编号姓名性别单位电话读者类型已借数量

1Γibii................:郝淑敏男HULLHULLNULLNULL

读者编号姓名性别已借数量

◎查询已成功执行.SHUJU(15.0RTM)SHUJUXAdministrator(56)library00:00:001行

5.在“图书”表的“作者”列上降序建立名为“IX_图书一作者”的普通索引。

uselibrary

CreateindeXIX_图书—作者on图书(作者desc)

6.在“读者类型”表的“类型名称”列上降序建立名为“IX_读者一类型”的唯一性索引。

uselibrary

go

createuniqueindexIX_读者一类型on读者类型(类型名称desc)

7.

两者均显示更新了数据行

USΘJXGL

declaremycursorscrollcursor

forselect*from学生

openmycursor

fetchfirstfrommycursor

fetchlastfrommycursor

8.

(1)

useJXGL

declaremycursor2cursor

static

forselect*from学生

openmycursor2

select@@cursor_rows,

caseQ@cursor_rows

when-1then,该游标为动态游标∣

when0then,没有打开游标,

else,非动态游标,包含总行数I

end

(2)

useJXGL

declaremycursor3cursor

keyset

forselect*from学生

openmycursor3

select@0cursor_rows,

case@@CUrSorrows

when-1then,该游标为动态游标,

whenOthen,没有打开游标,

else,非动态游标,包含总行数,

end

(3)

USeJXGL

declaremycursor4cursor

static

forselect*from学生

openmycursor4

select@@cursor_rows,

case@@cursor_rows

when-1then,该游标为动态游标,

whenOthen,没有打开游标,

else,非动态游标,包含总行数I

end

习题九存储过程和触发器

一、选择题

1-5.ABCBC6-1O.ABACA11-15.D4BBBC16-20.BABBC

1.在定义存储过程时,下面说法中不正确的是()。

A.OUtPUt关键词用于指定参数为输入参数类型

B.如果定义了默认值,执行存储过程时可以不提供实参

C.Varying用于指定作为输出参数支持的结果集,且仅适用于定义CUrSOr输出参数

D.不推荐使用SP一为前缀来创建用户自定义存储过程,因为SP_前缀是用来命名系统存储过

程的

2.关于存储过程,下面说法中错误的是()。

A.存储过程可用于实施企业业务规则B.存储过程由数据库服务器自动执行

C.存储过程可以使用游标D.存储过程可以有输入输出参数

3.下列选项中不属于存储过程的优点的是()。

A.增强代码的重用性和共享性

B.可以加快运行速度,减少网络流量

C.阻挡没有权限的用户间接存取数据库,从而保证数据的安全性

D.以使相关的动作在一起发生,从而可以维护数据库的完整性

二、填空题

1.服务器2.系统3.varying4.##5.output6.表或视图7.insteadof8.insert9.

deleted表10.update

三、实践题

1.

uselibrary

go

createprocnacrissus

as

declare@nintz@iintz@jint,@kint

set@n-100

whileΘn<=999

begin

set@i@n/100

set@j=(0n-01*100)/10

set@k@n10

ifjjj@k*@k*@k

printcast(@nasChar∙(3))+,是水仙花数,

set@n=@n+l

end

go

execnacrissus

2.

uselibrary

go

createprocreader_info

0dzbhchar(4)=,1001,

as

select*from读者where读者编号=@dzbh

go

execreader_info

go

execreader_infodefault

go

execreader_info,1002,

g。

3.

uselibrary

go

createprocbook_lend

0tsbhchar(6)z@jyrsintoutput

as

select@jyrs=count(读者编号)

from借阅

where图书编号=Qtsbh

go

declareStsbhchar(β)λ@jyrsint

setθtsbh=,TP0001,

execbook_lend@tsbh,Qjyrsoutput

print@jyrs

4.

uselibrary

go

createtriggerinS—借阅on借阅

insteadofinsert

as

ifnotexists(select*from读者where读者编号—(SeleCt读者编号frominserted))

--ifexists(select*fromi⅛⅞,insertedwhere读者.读者编号=inserted.读者编号)=0

Print,读者编号不存储在读者表中,不能插入该记录,

else

begin

insertinto借阅select*frominserted

Print,已经成功插入记录!,

end

5.

uselibrary

go

createtriggerins_借阅

on借阅

forinsert

as

if(selectcount(*)from借阅where读者编号=(SeleCt读者编号from

inserted))>20

begin

rollbacktransaction

print,该读者已经数量已经查过规定借书数量,禁止借书,

end

一验证

,,,,,,

insertinto借阅(读者编号,借书编号,串号)values(1001zF27505,11)

6.

createtriggerup_图书

on图书

forupdate,insert

as

declare@priceint

select@price=单价frominserted

if0price<20

begin

rollbacktransaction

Print,单价必须在20元以上,

end

go

7.

uselibrary

g。

createtriggerdel—读者

on读者

afterdeleted

as

deletefrom借阅where读者编号in(

select读者编号fromdeleted)

拓展题目

8.在Iibrary数据库中,创建一个存储过程projeader,完成“读者”表的数据插入,包括

读者编号、姓名、单位、电话和读者类型。

uselibrary

go

createprocedurepro_reader

©readeridchar(4),©readernamechar(6.).©readerdepartvarchar(20).©readertele

varchar(13).@readertypeint

as

insertinto读者(读者编号,姓名,单位,电话、读者类型)

values(©readerid,©readername,©readerdepart,©readertele,©readertype)

go

一验证

execpro_reader'1200','束小雅','大数据','1380551****',2

9.创建一个logon触发器,限制登录名Login_R不能同时创建3个以上的数据库用户连接

访问

usemaster

go

ifexists(select*fromsys.>√∙r∖ertriggeɪs

,,

wherenameNtri-sessions)

droptriggertri_sessionsonallserver

go

createtriggertri_sessions

onallserver

forlogon

as

begin

if(selectcount(*)fromsys.dm<.ιxecsess;ons

whereisuserprocess1andoriginalloginname^,LoginR,)>-3

begin

printN'登录账户LOgiIvR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论