您好,欢迎来到微智科技网。
搜索
您的当前位置:首页实验三 更新数据库、视图及数据库完整性

实验三 更新数据库、视图及数据库完整性

来源:微智科技网


数据库

学 院 计算机学院 专 业 计算机科学与技术 班 级 学 号 姓 名 指导教师

2012/4/30

实验三 更新数据库、视图及数据库完整性

一、实验目的

熟悉通过SQL语句更新数据库、创建视图以及操作视图的基本使用方法,熟悉DBMS系统关于数据库完整性的约束。

二、实验内容和要求

1、熟练update,delete,insert语句进行更新数据库操作

2、创建视图以及操作视图的基本使用方法,

3、通过实验,了解并掌握实体完整性、参照完整性的定义、违约处理。练习使用触发器确保数据完整性。

三、实验主要仪器设备和材料

1.计算机及操作系统:PC机,Windows 2000/xp; 2.数据库管理系统:SQL sever 2000/2005; 四、实验方法、步骤及结果测试

实验题目:

题目1、在表S中插入学生学号009,姓名:麦兜,性别男,1984年4月1日出生,网络工程专业,CS系,籍贯:北京。 实现代码及查询结果截图:格式如下 SQL语句 use student1 go insert into s(sno,sname,ssex,sbirth,ssp,sdept,sfrom) values(009,'麦兜','男','1984-4-1','网络工程','cs','北京') go 查询结果截图显示 题目2、把王涛同学的选课信息全部删掉。查询每个学生选课信息,包括学号,姓名,选课课号,成绩

实现代码及查询sc表的结果截图:

use student1 go delete from Sc where sno in(

select sno from s

where sname='王涛' )

如图所示,学号为6的王涛的选课信息已被删除。 题目3、将选修数据库不及格的成绩全部置空。 实现代码及查询结果截图:

use student1 go

update Sc set grade=null

where grade<60 and cno in(

select cno from C

where cname='数据库' )

Go

题目4、

①查找IS系选修数据库的学生学号,姓名,课程号,成绩。给出截图

use student1

select s.sno,sname,cno,grade from s,Sc

where s.sdept='is' and cno in( ) go

select cno from C

where cname='数据库'

②把IS系同学选修DB的成绩提高10分。

use student1 go

update Sc

set grade=grade+10 where sno in( )

and cno in(

select cno from C select sno from s

where sdept='is'

where cname='数据库' ) Go

修改后的结果如下学号为7和8,课程号为5的结果成绩:

③查看IS系选修数据库的学生学号,姓名,课程号,成绩。给出截图 实现代码及查询结果截图:

use student1

select s.sno,sname,cno,grade from s,Sc

where s.sdept='is' and cno in( ) go

select cno from C

where cname='数据库'

题目5、

①增加麦兜的选课信息。选修’计算机应用’,成绩44分。选修’数据库’,成绩60分 (可以分步求,也可以参照T-SQL中的变量的用法)

use student1 go

insert into Sc(sno,cno,grade) values(009,01,44)

insert into Sc(sno,cno,grade) values(009,05,60)

②查看麦兜的选修信息。显示字段包括学号,姓名,选修课名,成绩

use student1 go

select s.sno,sname,cname,grade from s,C,Sc

where s.sno=009 and s.sno=Sc.sno and C.cno=Sc.cno

实现代码及查询结果截图:

题目6、删除麦兜不及格的选课信息。

use student1 go delete from Sc

where grade<60 and sno=009

实现代码及查询结果截图:

题目7、把CS系学生的学号、姓名、选课课号、课程名、成绩做成视图CS_SC,然后查询该视图所有信息

USE student1 go

create view CS_SC (sno,sname,cno,cname,grade) as

select s.sno,sname,c.cno,cname,grade from s,C,Sc

where s.sdept='cs' and s.sno=Sc.sno and C.cno=Sc.cno

use student1 go select * from CS_SC

实现代码及查询结果截图:

题目8、在CS系的视图中,将学号为009的学生的成绩增加5分 实现代码及查询结果截图:

use student1 go

update CS_SC set grade=grade+5

where sno=009 go select * from CS_SC where sno=009 go

题目9、在sc中插入一条信息,学号009,这个学生还没选课,没有成绩,查看DBMS的提示信息。写出原因(违反了什么完整性规则,应该怎么解决) 实现代码及查询结果截图:

use student1 go

insert into Sc (sno) values(009) go

提示信息如图所示,原因是在sc表中,sno与cno共同构成了sc表的主键,主键是不能为空的,而在插入学号009时,因为该学号还没有选课,也没有成绩,自然也没有对应的课程号,这与主键不为空相矛盾,显然违反了用户定义完整性。

题目10、插入一门课的信息,课程号:08,课程名:java基础, 课程学分:40,查看DBMS提示信息。写出原因 实现代码及查询结果截图:

use student1 go

insert into C(cno,cname,ccredit) values(08,'java基础',40) go

出现的错误如图所示,原因是违反了属性上的约束条件。Ccredit的约束条件是(0,20)取值。

题目11、插入学生信息。学号002,姓名张三,性别男。查看查看DBMS提示信息。写出原因

实现代码及查询结果截图:

use student1 go

insert into s(sno,sname,ssex) values(002,'张三','男') go

出现的错误如图所示,原因是sno是在s表中是主键,取值为一,表中已经存在002学号学生,不能重复插入相同的键。

题目12、①将姓名刘%的学生信息删掉,查看dbms的提示。给出截图。思考该操作违反什么完整性操作?

use student1 go delete

from s

where sname='刘%' go

错误如图所示,该操作违反了参照完整性。若从s表中删除刘%的信息,会导致在sc表中刘%对应的学号在s表中找不到一个刘%的元组。

②删除刘%的选课信息之后,删除该学生信息,DBMS有何提示

删除刘%的选课信息代码: use student1 go delete from Sc where sno in( )

select sno from s

where sname='刘%'

删除刘%的选课信息如下图所示:

删除刘%学生信息代码: use student1 go delete

from s

where sname='刘%' go 结果如图:

删除成功。

③在学生表上设置删除触发器,如果被删除的学生姓名为”麦兜”,则不执行删除操作,并给出提示 ”通过设计触发器禁止删除麦兜同学的信息,请继续执行其它操作!”(提示:请学习临时表inserted和deleted的用法,输出提示信息用PRINT)

use student1 go

create trigger delet_麦兜 on s for delete as begin

if((select sname from s)='麦兜' ) print '不能删除' rollback

end

④思考题

如何通过cascade或者触发器或者SQLServer2005中自带的设置来实现级联删除或级联更新?实现后给出实现代码或者实现操作步骤以及截图

use student1 go

create trigger delet_update on s

for update,delete as begin

if exists(select sno from Sc)

update s set sno=(select sno from Sc) else

delete s where sno=(select sno from Sc) end

go

实现代码及查询结果截图:

五、实验中出现的问题及解决方案

在给选修了数据库的学生成绩加10分的时候遇到数据类型冲突的问题。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务