第一篇:数据库原理实验五
数据库原理及应用实验报告
实验名称:数据库备份与恢复、数据库的安全性 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安班 姓
名: 学
号:
联系电话:*** 电子邮件: 实验地点:东6E501 实 验 日 期: 2017年5月16日 实验报告日期:2017年 5月 18日
成绩:__________________________ 实验五 数据库备份与恢复
一、实验目的
了解数据库恢复技术的原理
了解oracle各类故障的数据恢复方法 了解oracle的物理备份
掌握oracle数据库逻辑备份方法 掌握oracle数据库恢复的方法
学会使用exp备份数据库、使用imp恢复数据库 了解flashback 的使用
学会使用PLSQL/developer工具完成导入导出
二、实验平台
Oracle 11g
三、实验步骤、出现的问题及解决方案(不能解决的将问题列出)(1)实验步骤
1、逻辑备份
(1)导出自己用户中的“预约”表在运行中输入:exp 用户名/密码@orcl 按照提示进行导出
(2)删除自己用户中的“预约”表
1(3)进行导入数据库操作,在运行中输入:IMP 用户名/密码@orcl按照提示进行导入
(4)查询导入的“预约”表中的信息。
(5)导出数据库(以全库方式导出)。必须是DBA才能执行完整数据库或表空间导出操作。
2、使用Flashback(1)设置行可移动SQL>ALTER TABLE 读者 ENABLE ROW MOVEMENT
(2)在读者表中添加多条记录(或者删除没有借书的读者记录)。
(3)闪回到改变前(TO_ TIMESTAMP函数完成对非时间戳类型数据的转换)SQL>FLASHBACK TABLE 读者 TO TIMESTAMP TO_ TIMESTAMP(„.)2
3、使用PLSQL/developer 来完成SQL导出
(1)打开PLSQL/developer,选择菜单“工具“导出表(2)点击你要导出的表,然后选择标签SQL 插入
(3)选中复选框创建表,浏览或者输入输出文件,然后点击导出
(4)在你输入的目录下找到你的导出文件(SQL 文件)
(5)依次导出你账户下所有用户自定义表。
(6)删除自己表空间中的“预约”表(7)通过“工具“导入表,利用SQL插入导入数据库预约表。
(8)查询导入的预约表,检查导出是否正确。
4、使用PLSQL/developer 来完成PLSQL/developer方式导出(1)打开PLSQL/developer,选择菜单“工具“导出表(2)点击你要导出的表,然后选择标签PLSQL/developer(3)浏览或者输入输出文件,然后点击导出。
4(4)在你输入的目录下找到你的导出文件。(5)依次导出你账户下所有用户自定义表。(6)删除自己表空间中的“预约”表
(7)通过“工具“导出表,PLSQL/developer方式导入数据库预约表。
(8)查询导入的预约表,检查导出是否正确。
(2)问题及解决方案
-问题①:在命令行内输入登录命令“sqlplus S5120155364/123@orcl by sysdba”时无法正确连接
原因:使用了错误的连接词“by”
解决方案:将其改为“sqlplus S5120155364/123@orcl as sysdba”-问题②:点击“Enter”键,命令不执行 原因:命令语句后遗漏分号或使用了中文分号 解决方案:改为以英文分号结尾的命令语句-问题③:无法以全库方式导出数据库(未解决)
实验六 数据库的安全性
一、实验目的
理解数据库的安全性保护
掌握ORACLE中有关用户创建的方法 理解数据库存取控制机制
熟练掌握PL-SQL的数据控制语言,能通过自主存取控制进行权限管理 熟悉用户资源文件的使用 熟悉ORACLE中角色管理
熟悉视图机制在自主存取控制上的应用
四、实验平台
Oracle 11g
五、实验步骤、出现的问题及解决方案(不能解决的将问题列出)(1)实验步骤
1、同学之间相互授权访问对方“读者”表并能进行查询。
2、以SYSTEM登录数据库为你的帐号增加系统角色DBA.3、重新以自己的帐号登录,创建一个数据库用户:帐号_USER1(注:帐号即学生登录数据库帐号,如:S20101206),该用户拥有所有CONNECT, resource,DBA系统角色权限。
4、建立角色:帐号_OPER,该角色拥有调用存储过程借书、还书、预约的权限,以及CONNECT系统角色权限。(注:执行存储过程的授权语句Grant execute on procedure_name to user/role)
5、创建一个数据库用户:帐号_USER2(注:帐号如:S20101206)为该用户授权角色:帐号_OPER。以该用户登录,完成借书功能。
6、以自己的帐号登录,如:S20101206,建立视图VIEW_READER, 该视图包含书目(ISBN, 书名,作者,出版单位,图书分类名称)(注:所有属性来自关系书目和图书分类)
7、创建一个数据库用户:帐号_USER3(注:帐号如:S20101206)该用户具有对视图VIEW_READER查询的权限。创建一个概要文件,如果 帐号_USER3连续3次登录失败,则锁定该账户,10天后该账户自动解锁。以该用户登录进行权限测试。
(2)问题及解决方案
-问题①:在命令行内输入登录命令“sqlplus S5120155364/123@orcl by sysdba”时无法正确连接
原因:使用了错误的连接词“by”
解决方案:将其改为“sqlplus S5120155364/123@orcl as sysdba”-问题②:点击“Enter”键,命令不执行 原因:命令语句后遗漏分号或使用了中文分号 解决方案:改为以英文分号结尾的命令语句
第二篇:数据库原理实验指导书
《数据库原理实验指导书》
河南科技大学电子信息工程学院目录
实验规则..................................................................................................................................0 实验报告要求..........................................................................................................................2 基本实验方法..........................................................................................................................2 实验环境..................................................................................................................................2 实验一:数据定义及更新语句练习......................................................................................3 实验二:简单查询和连接查询..............................................................................................5 实验三:分组查询和嵌套查询..............................................................................................7 实验四:视图操作和数据控制..............................................................................................9 实验五:触发器和存储过程................................................................................................11 选作题目................................................................................................................................13
实验规则
为了顺利完成实验教学任务,确保人身设备安全,培养严谨、踏实、实事求是的科学作风和爱护国家财产的优良品质,特制定以下实验规则:
1、实验纪律
(1)在实验室不得做和实验无关的事情。(2)遵守纪律,不迟到,不旷课。
(3)不能拆卸硬件,更不能拿走实验设备或仪器。(4)保持实验室安静、整洁,爱护公物。
2、实验过程
(1)预习实验内容。自行设计SQL语句。
(2)上机操作。每执行一句记录执行情况,主要是错误信息和错误原因。(3)检查操作结果是否正确。
(4)根据实验过程的记录书写实验报告。
实验报告要求
1、报告用纸 采用统一的河南科技大学实验报告用纸,不得用别的纸张代替。
2、实验报告封面内容
实验名称:(如实验一 数据库创建)班级名称:(如计科101班)学生学号: 学生姓名: 实验时间:
3、实验报告内容
见各具体实验项目的要求。
基本实验方法
本实验要求熟悉SQL Server环境和数据库的相关知识。
实验环境
Microsoft SQL Server2012 2 实验一:数据定义及更新语句练习一、二、实验目的:熟练掌握用SQL语句实现数据库和基本表的创建、数据的更新。预习要求:实验前复习讲授过的有关创建数据库、基本表的SQL语句,预习SQL Server2000环境,特别是资源管理器和查询分析器的相关用法。
三、实验内容:
(一)用SQL语句建立如下mySPJ数据库,包括S,P,J,和SPJ四个基本表(教材第二章习题5中的四个表),要求实现关系的三类完整性。
S(SNO,SNAME,STATUS,CITY);P(PNO,PNAME,COLOR,WEIGHT);J(JNO,JNAME,CITY);SPJ(SNO,PNO,JNO,QTY)供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商 供应某种零件 给某工程项目的数量为QTY。
(二)分别使用插入、删除、修改的方式更新基本表中的数据。
四、实验方法和步骤:
(一)使用Microsoft SQL Server企业管理器和查询分析器建立数据库mySPJ: 1.打开“开始->程序->Microsoft SQL Server->企业管理器”;
2.在企业管理器左边的树标签中依次打开“Microsoft SQL Server-> SQL Server组->(local)(Windows NT)->数据库”,(local)(Windows NT)前的红色标记转化为绿色标记表明NT服务已启动;
3.从企业管理器的“工具”菜单中选择“SQL 查询分析器”,打开查询分析器后,在其窗口书写创建数据库mySPJ的SQL语句,点击执行按钮(或F5键)执行该SQL 3 语句;
4.在企业管理器左边的树标签中查看数据库是否建立成功。
(二)在数据库mySPJ中建立S,P,J,和SPJ四个基本表:
按照实验内容给出的基本表结构在查询分析器窗口中书写SQL语句分别建立各表,并设置主键和外键约束;
(三)更新表数据:
1.利用Insert 语句将习题中给出的示例记录插入各表。2.利用Update更新表中的记录:
①将p表中的所有红色零件的重量增加5。
②将spj表中所有天津供应商的QTY属性值减少10。用子查询。
3.利用Delete语句删除p表中的所有红色零件的记录。
4.SQL语句执行后返回基本表查看更新后的结果,如果与期望不符,分析原因并记录在实验报告中。
五、思考题:
(一)在为各表设定关键字时弹出的页面中有关键字和索引选项,试通过给基本表设定这两个项目并说明二者的区别。
(二)在基本表中输入数据时,注意数据与字段的数据类型和长度以及能否为空的属性是否一致,保存时如有错误分析错误原因,及时改正并将错误报告写在实验报告中。
六、实验报告要求:
(一)实验目的:(二)实验内容:
(三)完成情况(附上设计的SQL语句)。
(四)实验结果:如果是查询语句,将查询结果记录列出来,其它可以不写。(五)问题及解决:首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。(六)回答思考题提出的问题,(七)实验总结:心得体会,建议等。
实验二:简单查询和连接查询
一、实验目的:熟练掌握用SQL语句实现的简单查询和多个数据表连接查询。
二、预习要求:实验前复习讲授过的有关简单查询与多表查询的知识,编写相应的SQL语句。
三、实验内容:
(一)完成下面的简单查询:
①查询所有“天津”的供应商明细; ②查询所有“红色”的14公斤以上的零件。③查询工程名称中含有“厂”字的工程明细。(二)完成下面的连接查询:
①等值连接:求s表和j表的相同城市的等值连接。
②自然连接:查询所有的供应明细,要求显示供应商、零件和工程的名称,并按照供应、工程、零件排序。
③笛卡尔积:求s和p表的笛卡尔积 ④左连接:求j表和spj表的左连接。⑤右连接:求spj表和j表的右连接。
四、实验方法和步骤:
参照实验一中给出的使用Microsoft SQL Server企业管理器和SQL查询分析器的方法,将实验内容中所要求的查询项目依次用SQL语句实现,并记录下执行结果。
五、思考题:
查看实验内容2中左连接和右连接的执行结果是否一致,为什么?
六、实验报告要求:(一)实验目的:(二)实验内容:
5(三)完成情况(附上设计的SQL语句)。
(四)实验结果:如果是查询语句,将查询结果记录列出来,其它可以不写。(五)问题及解决:首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。(六)回答思考题提出的问题,(七)实验总结:心得体会,建议等。实验三:分组查询和嵌套查询
一、实验目的:熟练掌握用SQL语句实现多个数据表的分组查询和嵌套查询。
二、预习要求:实验前复习讲授过的有关分组查询和嵌套查询的知识,编写相应的SQL语句。
三、实验内容:(一)分组查询:
1.求各种颜色零件的平均重量。2.求北京供应商和天津供应商的总个数。3.求各供应商供应的零件总数。4.求各供应商供应给各工程的零件总数。5.求使用了100个以上P1零件的工程名称。6.求各工程使用的各城市供应的零件总数。
(二)嵌套查询:
1.in连接谓词查询:
① 查询没有使用天津供应商供应的红色零件的工程名称。② 查询供应了1000个以上零件的供应商名称。(having)2.比较运算符:求重量大于所有零件平均重量的零件名称。3.Exists连接谓词:
① 查询供应J1的所有的零件都是红色的供应商名称。② 至少用了供应商S1所供应的全部零件的工程号JNO。
四、实验方法和步骤:
参照实验一中给出的使用Microsoft SQL Server企业管理器和SQL查询分析器的方法,将实验内容中所要求的查询项目依次用SQL语句实现,并记录下执行结果。
五、思考题:
(一)嵌套查询中的in连接谓词查询,关键字in可以直接用any代替么?什么情况下in和any可以互相代替?
(二)嵌套查询中的内查询为外查询返回的内容是什么?是表达式?视图?还是物理数据集合?
六、实验报告要求:(一)实验目的:(二)实验内容:
(三)完成情况(附上设计的SQL语句)。
(四)实验结果:如果是查询语句,将查询结果记录列出来,其它可以不写。(五)问题及解决:首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。(六)回答思考题提出的问题,(七)实验总结:心得体会,建议等。
实验四:视图操作和数据控制
一、实验目的:熟练掌握用SQL语句实现视图操作和数据控制。
二、预习要求:实验前复习讲授过的有关视图操作和数据控制的知识,编写相应的SQL语句。
三、实验内容:
(一)定义如下视图:
①查询北京的供应商的编号、名称和城市。②查询S1供应商的所有供应明细。
③查询各工程名称使用的各种颜色零件的个数。查询上面定义的视图。
(二)数据控制:
①使用GRANT把对S表查询的权利授予WangLi。
②使用GRANT把对P表查询、插入、修改、删除的权利授予LiMing。
③使用REVOKE把LiMing对P表插入、删除的权利回收。
四、实验方法和步骤:
参照实验一中给出的使用Microsoft SQL Server企业管理器和SQL查询分析器的方法,将实验内容中所要求的查询项目依次用SQL语句实现,并记录下执行结果。
五、思考题:
实验内容中的哪些视图可以用来更新记录?
六、实验报告要求:(一)实验目的:(二)实验内容:
(三)完成情况(附上设计的SQL语句)。
(四)实验结果:如果是查询语句,将查询结果记录列出来,其它可以不写。(五)问题及解决:首先写出执行语句不成功的时候系统报告的错误信息。然后 9 分析错误原因,并给出解决办法。(六)回答思考题提出的问题,(七)实验总结:心得体会,建议等。
实验五:触发器和存储过程
一、实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。
二、预习要求:存储过程和触发器的相关概念,事务的相关概念,编写相应的SQL语句。
三、实验内容:
有一个小型的图书管理数据库,包含的表为:
bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表
borrowcard(cardid,ownername);--借书证表
borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表 写一个存储过程,实现借书操作,要求有事务处理。(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。(3)要求用触发器实现表的完整性控制。
四、实验方法和步骤:
(一)在查询分析器中创建包含以上三张表的数据库。
(二)参考CREATE PROCEDURE语句和Create Trigger语句。在事务执行过程中引入错误触发事件,可以考虑在增加借书记录时违反实体完整性或参照完整性,以此体会事务的错误保护机制,并用触发器实现表的完整性控制。
五、思考题:
如何通过系统的设置实现类似的功能,而不需触发器?
六、实验报告要求:(一)实验目的:(二)实验内容:
(三)完成情况(附上设计的SQL语句)。
11(四)实验结果:如果是查询语句,将查询结果记录列出来,其它可以不写。(五)问题及解决:首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。(六)回答思考题提出的问题,实验总结:心得体会,建议等。
选作题目
选作题目1:用vb,delphi或者c++builder设计一个数据库应用程序,实现一个简单的成绩管理,建立三个表:学生表S,课程表C和成绩表SC。要求实现的功能:(1)维护学生信息;(2)维护课程信息;(3)录入成绩;(4)查询一个学生的所有课程成绩;(5)查询每门课程的平均成绩。(6)打印学生成绩报表;(7)打印每门课程的平均成绩报表。
选作题目2:自由结合以(5-6)人为小组完成一个数据库系统设计的小课题。要求用ERWIN工具对数据库进行建模。
第三篇:数据库原理实验教案
《数据库原理》课程实验
实验1 创建数据库和数据表
一、实验目的
熟悉SQL Server Management Studio界面;掌握通过图形化向导和执行Transact-SQL语句创建数据库的方法。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
SQL Server中的一个数据库必须至少包含一个数据文件和一个事务日志文件,所以创建数据库就是建立主数据文件和日志文件。
在SQL Server 2005中创建数据库的方法主要有两种:一是在SQL Server Management Studio窗口中使用可视化界面,通过方便的图形化向导创建,二是通过执行Transact-SQL语句创建。
(一)向导方式创建
1、从“开始”菜单选择“所有程序”→“Microsoft SQL Server 2005”,打开“SQL Server Management Studio”窗口,使用Windows或SQL Server身份验证建立连接。
2、在“对象资源管理器”窗格中展开服务器,选择“数据库”节点右击,从弹出的快捷菜单中选择“新建数据库”命令,打开“新建数据库”窗口。
3、该窗口中有3个页,分别是“常规”、“选项”和“文件组”,完成这3个页的内容即可完成数据库的创建。这里,我们仅设置“常规”的相应内容,其他2个页的内容按照默认设置即可。
(1)“数据库名称”文本框中输入数据库的名称,如“sample_st”,再输入该数据库的所有者,这里使用默认值即可。(也可以通过单击文本框右边的“浏览”按钮选择所有者。
(2)“数据库文件”列表中包括两行,一个是数据文件,一个是日志文件。通过单击下面相应的按钮可以添加或删除相应的数据文件。
逻辑名称:指定该文件的文件名。
文件类型:用于区别当前文件是数据文件还是日志文件。 文件组:显示当前数据库文件所属的文件组。
初始大小:指定该文件的初始容量。在SQL Server 2005中数据文件的默认值为3MB,日志文件的默认值为1MB。 自动增长:用于设置在文件容量不够用时,文件根据何种增长方式自动增长。
路径:指定存放在文件的目录。默认情况下,SQL Server 2005将存放路径设置为其安装目录下的data子目录,单击该列中的按钮可以在打开的“定位文件夹”对话框中更改数据库的存储路径。
完成上述操作后,单击“确定”按钮关闭“新建数据库”窗口,即完成了数据库的创建,可以在“对象资源管理器”窗格中看到新建的数据库。
(二)语言方式创建
SQL Server 2005使用的Transact-SQL语言是标准SQL的增强版本,使用它提供的Create Database语句同样可以完成对数据库的建立(参考内容见附录)。
1、单击“新建查询”按钮,创建一个查询输入窗口将附录中的语句复制到该窗口。选择创建数据库的命令,单击工具栏中的“分析”按钮,可以检查语法错误;单击“执行”按钮即可执行语句,在查询窗口内的“查询”窗格中可以看到“命令已成功完成”的提示消息。在“对象资源管理器”窗格中刷新,即可看到新建的数据库。
2、继续执行Create Database之后的语句,在“sample_st”数据库中用Create Table命令依次建立Student、Course和SC这三个数据表,利用Insert命令为各数据表添加数据。(参考内容见教材P84)
(三)知识巩固
仿照附录内容,用SQL-DDL语言创建“产品订购”数据库,包含四个数据表S、P、J和SPJ,表结构及内容见教材P122。
实验2 数据库的简单查询
一、实验目的
掌握单表查询中各个子句(Select、From、Where、Group、Having、Order)的用法,特别要掌握比较运算符和逻辑运算符的使用。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
在已建立的数据库和数据表的基础上,用Select语句完成下列查询操作。
1、查询全体学生的学号和姓名。
select sn,sno from s
2、查询全体学生的所有基本信息(仅针对Student表)。
select * from s
3、对SC表查询全体学生的选课记录,在显示结果中为“Grade”列增加5分。select score+5 from sc
4、查询全体学生的学号和姓名,将原来的英文列名设置中文别名。select sn as 姓名,sno as 学号 from s
5、显示所有选课学生的学号,去掉重复结果。
select distinct sno from sc
6、查询成绩在80分以上的学生选课记录
select * from sc where score>80
7、查询经济系所有学生的学号和姓名。
select sn,sno from s where dept='经济系'
8、查询成绩在80~90分的学生选课记录。
select * from sc where score between 80 and 90
9、查询年龄不在22~25的学生记录。
select * from s where age not between 22 and 25
10、查询所有姓“刘”的学生记录。
select * from s where sn like'刘%'
11、查询无考试成绩(成绩为空值)的学号、课程号。5
select sno ,cno from sc where score is null
12、查询考试成绩非空值的学号、课程号。
select sno ,cno from sc where score is null
13、查询数学系年龄小于20岁的学生记录。
select * from s where dept ='数学系'and age <28
14、查询选修了“101”或“102”课程的选课记录。select * from c where cno ='101' or cno ='102'
15、查询学生总人数。
select count(sno)from s
16、查询选修了课程的学生人数。
select count(distinct sno)from sc
17、查询选修了“101”课程的学生的平均成绩。
select AVG(score)from sc
where cno='101'
18、查询学号为“01003”的学生的考试总成绩。
select sum(score)from sc
where sno=01003
19、查询“101”课程的最高分和最低分。
select max(score),MIN(score)from sc
where cno='101'
20、查询每门课程的选课人数。
select cno,COUNT(sno)from sc
group by cno
21、查询每个学生的学号、选课数、平均成绩和总成绩。
select sno,COUNT(cno)/*,AVG(score),sum(score)*/ from sc group by sno
22、查询选课数超过2的学生学号及其选课数。
select sno,COUNT(cno)from sc
group by sno
having COUNT(*)>2
23、查询所有学生信息,查询结果按年龄降序排列。(针对Student表操作)
select * from s order by AGE desc
24、查询所有学生信息,查询结果按系名升序,同系学生按年龄降序排列。
select * from s order by dept,AGE desc
25、查询选课数超过2的学生学号及其选课数,查询结果按选课数降序排列。
select sno,COUNT(cno)from sc group by sno having COUNT(*)>2 order by count(cno)desc
实验3 数据库的多表查询
一、实验目的
继续熟练SQL-SELECT语句的使用;理解多表查询的概念;掌握多表连接查询中各个子句的用法,特别要比较内连接和外连接的结果。掌握非相关子查询、相关子查询的用法,理解它们的执行过程;学会在SQL Server中用Exists实现交运算,用Not Exists实现差运算。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
(一)、在已建立的数据库和数据表的基础上,用Select语句的连接查询完成下列操作。
1、查询每个学生的基本信息及其选课情况。
2、查询选修“101”课程的学生学号、姓名和成绩。
3、查询与“李平”在同一个系学习的学生记录。
4、查询与“李平”年龄相同的学生记录。
5、查询选修课程名为“数据库原理”的选课记录。
6、查询选修课程名为“数据库原理”的学生记录。
7、查询选修“101”课程且成绩≥90的学号、姓名和成绩。
8、查询“李平”的所有选课记录。
9、查询数学系学生选修的课程号,要求结果中去掉重复记录。
10、查询计算机系选修课程数≥2的学号、姓名及平均成绩,查询结果按平均成绩降序。
11、查询每个学生的学号、选修课程号、课程名及成绩。
12、查询所有学生的选修情况(包括选课和未选课的学生),要求显示学号、姓名、课程号和成绩。
(二)、在已建立的数据库和数据表的基础上,用Select语句的嵌套查询完成下列操作。
1、查询选修“101”课程且成绩≥90的学号、姓名。
2、查询“李平”的所有选课记录。
3、查询与“李平”在同一个系学习的学生记录。
4、查询与“李平”年龄相同的学生记录。
5、查询选修课程名为“数据库原理”的选课记录,输出结果包括学号和成绩。
6、查询选修课程名为“数据库原理”的学生记录,输出结果包括学号、姓名和所在系。
7、查询学号为“01003”学生的选修课程号和课程名。
8、查询没有选修“101”课程的学生学号和姓名。
9、查询选修“101”课程或“102”课程的学生姓名。
10、查询选修“101”课程和“102”课程的学生学号。
11、查询选修“101”课程但没选修“102”课程的学生学号。
12、查询没有选修任何课程的学生记录,输出结果包括学号、姓名和所在系。
13、查询数学系学生选修的课程号,要求结果中去掉重复记录。
14、查询选修课程至少包含“01003”选修课程的学生学号。实验4 数据库更新、视图定义及使用
一、实验目的
掌握Insert、Update、Delete语句的使用;对于Insert语句,要求理解默认值约束、空值约束在插入记录时所起的作用。理解视图的概念,掌握Create View、Drop View语句的使用;掌握基于视图的查询语句的使用。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
(一)、在已建立的数据库和数据表的基础上,向数据库中添加一个临时表ST,其结构比Student表结构多一个score字段。用Insert语句向临时表输入数据,输入有误时用Update语句进行修改。再用三个更新语句完成下列操作。
1、向Student表添加若干新记录,内容自定。(观察已定义的表的约束情况)
2、向SC表添加新记录,内容自定,不低于10条(注意不能违反参照完整性)。
3、为临时表ST添加记录。
4、把Student表的所有行一次性地加到临时表ST中。
5、在ST表中把所有学生的成绩加2分。
6、在ST表中把所有学生的年龄增加1。
7、在ST表中把“李平”的所在系改为“计算机”。
8、在ST表中将选修课程“数据库原理”的学生成绩加2分。
9、在SC表中删除所有成绩为空值的选修记录。
10、删除计算机系选修成绩不及格的选课记录。
(二)、在已建立的数据库和数据表的基础上,完成下列操作。
1、建立数学系学生的视图MAST。
2、建立计算机系选修课程名为“数据库原理”的学生视图,视图名:CSTVIEW,该视图中应包括属性列:学号、姓名、成绩。
3、创建一个名为STSUMVIEW的视图,包括所有学生的学号和总成绩。
4、建立学生选课视图SCVIEW,包括所有学生的学号、姓名、课程号、课程名和成绩。
5、通过MAST视图查询学生基本信息。
6、通过SCVIEW查询成绩大于90分的学生的学号和成绩。
7、查询计算机系选修课程名为“数据库原理”并且成绩大于85分的学生的学号和成绩。
8、通过MAST视图将学号为“01008”学生的年龄修改为21岁。
9、通过MAST视图将学号为“01009”学生所在系改为“经济”,是否能成功执行?若不能成功请说明理由;若修改成功,请再次通过MAST视图查询学生基本信息,是否能查询到该生?若不能查询请说明理由。
10、通过SCVIEW视图将学号为“01004”学生的总成绩修改为380分,是否能成功执行?若不能成功请说明理由。
实验5 数据库的安全与保护
一、实验目的
理解SQL Server的用户与权限管理机制,掌握用对象资源管理器创建服务器登录帐号,并同时建立用户。掌握如何为给定的用户分配权限。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
用户与权限管理
(1)打开“SQL Server Management Studio”窗口,使用对象资源管理器创建两个服务器登录帐号Test1和Test2,并在“sample_st”数据库中创建两个对应的同名用户。设置Test1用户和Test2用户的默认架构为guest。
(2)使用Test1身份登录,并为Test2分配创建数据表的权限;用Test2身份登录来验证权限分配成功。
(3)使用Test1身份登录,收回刚刚分配给Test2的创建数据表的权限;用Test2身份登录来验证权限回收成功。
五、实验步骤
1、使用对象资源管理器创建两个服务器登录帐号。以系统管理员身份登录SQL Server。打开“SQL Server Management Studio”窗口,在对象资源管理器列表中,打开展开“安全性”文件夹,选择“登录名”图标,单击鼠标右键,在弹出的菜单中选择“新建登录名”。在打开的对话框中依次建立Test1和Test2,选择“SQL Server身份验证”,同时还要输入密码,默认数据库为“sample_st”。
(2)在“用户映射”中列出了当前登录帐号可以选择访问的数据库如“sample_st”,在其左侧的复选框中打勾,表示当前登录帐号可以访问对应的数据库,默认用户名与登录帐号相同。
(3)单击“确定”按钮完成创建。
2、创建新的数据库用户。
在对象资源管理器中选中要访问操作的数据库,展开“安全性”文件夹,在“用户”文件夹中查找是否已建立与登录名Test1和Test2同名的数据库用户,若已建立,则在属性中修改其默认架构为guest;否则右击鼠标在菜单中选择“新建用户”选项,出现“数据库用户-新建”对话框,建立相应的用户。最后,在sample_st数据库的“安全性架构guest属性权限”中,为test1和test2用户分配相应权限。
3、用Grant、Revoke命令实现对用户的授权和收权。
4、用Create命令创建数据表验证授权和收权是否成功。
5、以系统管理员身份登录SQL Server。使用:“GRANT SELECT ON SC TO Test1 WITH GRANT OPTION”命令,再分别以Test1和Test2身份登录,进行授权及查询数据表,验证“WITH GRANT OPTION”能否成功执行。
6、以系统管理员身份使用“REVOKE”命令回收上述授权。
实验6 数据库的完整性
一、实验目的
通过实验掌握数据库完整性概念,掌握利用SQL Server 2005实现数据库完整性的基本方法和步骤。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
1、建立关系模式。
完成教材P164第6题,用SQL语言定义“职工”和“部门”两个关系模式: 职工(职工号,姓名,年龄,职务,工资,部门号),职工号为主码 部门(部门号,名称,经理名,电话), 部门号为主码 要求在模式中完成以下完整性约束条件的定义:(1)定义每个模式的主码;(2)定义参照完整性;
(3)定义职工年龄不得超过60岁;(4)定义部门名称必须取值唯一。
2、验证完整性约束。
使用Insert Values语句向两个表中各插入5~10条记录,对下列内容进行验证。(1)验证主键约束:“职工”和“部门”两个表中是否能接受主码值相同的记录,通过实例验证。
(2)验证唯一约束:“部门”表中是否能接受名称相同的两个不同记录?为什么?
(3)验证检查约束:“职工”表中能否接受年龄不满足条件的记录?为什么?
(4)验证参照完整性:若“部门”表中不存在部门号为“008”的记录,是否能在“职工”表中插入部门号为“008”的职工记录?若删除“001”部门的所有信息,正确的操作步骤是什么?
实验7 数据库设计实验
一、实验目的
通过实验掌握数据库设计的基本方法和步骤。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
1、选定实验题目,为某个单位或部门设计数据库应用系统,比如:学生成绩管理、机房上机管理、职工档案管理、商品库存管理、图书管理、工资管理等。
2、根据选定的题目进行需求分析,重点分析数据需求和功能需求。
3、概念结构设计:画出E-R图。
4、逻辑结构设计:设计数据库和数据表的具体结构,指出各表的属性名称、数据类型;说明各表的主码及表之间的关联情况;说明本设计是否已达到3NF要求。
5、简要评价系统设计的优点和不足。
五、实验要求
1、提交设计报告,涵盖实验内容的全部信息,不低于1000字。
2、提交建立应用系统数据库的代码,所有数据表中的记录总数不低于50条。(请参照实验2的附录建立数据库)
实验8 存储过程实验
一、实验目的
通过实验熟悉使用存储过程进行数据库应用程序设计的方法
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
对sample_st数据库,编写存储过程,完成下面功能
1、统计任意一门课程的平均成绩
2、统计所有课程的平均成绩
3、统计任意一门课程的成绩分布情况,即按照分数段统计人数(即<60、60-69、70-79、80-89、90以上)
第四篇:数据库原理实验三
数据库原理及应用实验报告
实验名称:存储过程 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安1505班 姓
名:
学
号:512015 联系电话:电子邮件: 实验地点:东6E501 实 验 日 期: 2017年5月10日 实验报告日期:2017年 5月 11日
成绩:__________________________
一、实验目的
(1)了解存储过程的概念、优点
(2)熟练掌握创建存储过程的创建方法(3)熟练掌握存储过程的调用方法
二、实验平台
Oracle 11g
三、实验步骤、出现的问题及解决方案(不能解决的将问题列出)(1)实验步骤
1)建立存储过程完成图书管理系统中的借书功能。
功能要求:
借书时要求输入借阅流水号,借书证号,图书编号。(即该存储过程有3个输入参数)
借书时,借书日期为系统时间。 图书的是否借出改为‘是’
2)建立存储过程完成图书管理系统中的预约功能。 预约时要求输入预约流水号,借书证号,ISBN。(即该存储过程有3个输入参数)
存储过程先检查输入的ISBN版本的图书是否都已借出,如果是则进行预约,否则提示“该书目有可借图书,请查找”。 预约时间为系统时间。
3)建立存储过程完成图书管理系统中的还书功能。
还书时要求输入借书证号,图书编号,罚款分类号(即该存储过程有3个输入参数)。
还书日期为系统时间。 图书的是否借出改为‘否’。
(2)问题及解决方案
1)问题一:步骤一无法执行
原因:已创建的table中无“借书”项
解决方案:将原代码中的“借书”改为“借阅” 2)问题二:步骤二中出现无法识别的符号 原因:将英文分号误写为中文分号
解决方案:修正为英文分号“;”
四、思考与总结
(1)书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(2)注意区分中英文符号,避免出现符号无法识别以及程序没有结尾等错误(3)注意空格的使用,避免出现缺少或多余的空格,造成语法错误
五、附:实验完整源代码
1、CREATE OR REPLACE PROCEDURE PRO_借书功能(VAL_借阅流水号 IN 借阅.借阅流水号%TYPE, VAL_借书证号 IN 借阅.借书证号%TYPE, VAL_图书编号 IN 借阅.图书编号%TYPE)AS BEGIN INSERT INTO 借阅(借阅流水号,借书证号,图书编号,借书日期)VALUES(VAL_借阅流水号,VAL_借书证号,VAL_图书编号,TO_CHAR(SYSDATE(),'YYYY/MM/DD'));UPDATE 图书 SET 是否借出='是' WHERE 图书.图书编号 =VAL_图书编号;DBMS_OUTPUT.PUT_LINE(' 本次借书操作完成!');END;
2、CREATE OR REPLACE PROCEDURE PRO_预约功能(Y_预约流水号 IN 预约.预约流水号%TYPE, Y_借书证号 IN 预约.借书证号%TYPE, Y_ISBN IN 图书.ISBN%TYPE)AS Y_NUMBER BINARY_INTEGER;BEGIN SELECT COUNT(*)INTO Y_NUMBER FROM 图书 WHERE 图书.ISBN=Y_ISBN AND 图书.是否借出='否';IF Y_NUMBER=0 THEN INSERT INTO 预约(预约流水号,借书证号,ISBN,预约时间)VALUES(Y_预约流水号,Y_借书证号,Y_ISBN,TO_CHAR(SYSDATE(),'YYYY/MM/DD'));DBMS_OUTPUT.put_line('可执行预约!');ELSE DBMS_OUTPUT.put_line('该书可借,请查找!');END IF;END;
3、CREATE OR REPLACE PROCEDURE PRO_还书功能(VAL_借书证号 IN 借阅.借书证号%TYPE, VAL_图书编号 IN 借阅.图书编号%TYPE, 4 VAL_罚款分类号 IN 借阅.罚款分类号%TYPE)AS VAL_TIME DATE;BEGIN SELECT SYSDATE INTO VAL_TIME FROM DUAL;UPDATE 借阅 SET 归还日期=VAL_TIME WHERE 借书证号 =VAL_借书证号 AND 借阅.图书编号=VAL_图书编号;UPDATE 图书 SET 是否借出='否' WHERE 图书.图书编号 =VAL_图书编号;UPDATE 借阅 SET 罚款分类号=VAL_罚款分类号 WHERE 借书证号 =VAL_借书证号 AND 借阅.图书编号=VAL_图书编号;DBMS_OUTPUT.PUT_LINE(' 本次还书操作完成!END;
');
数据库原理及应用实验报告
实验名称:触发器 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安1505班 姓
名:李 维 学
号:5120155364 联系电话:*** 电子邮件: 实验地点:东6E501 实 验 日 期: 2017年5月10日实验报告日期:2017年 5月 10日
成绩:__________________________
一、实验目的
(1)了解触发器的概念、优点(2)掌握触发器的方法和步骤(3)掌握触发器的使用
四、实验平台
Oracle 11g
五、实验步骤、出现的问题及解决方案(不能解决的将问题列出)(3)实验步骤
1)通过序列和触发器实现借阅表中借阅流水号字段的自动递增。
2)通过序列和触发器实现预约表中预约流水号字段的自动递增
3)修改实验三借书功能的存储过程。
该存储过程要求: 借书时输入借书证号,图书编号。(即该函数有2个输入参数)
借书时,借书日期为系统时间。
*该存储过程主体部分只有insert into语句。
4)建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为‘是’。
5)修改实验三还书功能的存储过程。
该存储过程要求:
还书时输入借书证号,图书编号。(即该函数有2个输入参数) 还书时,还书日期为系统时间。
*该存储过程主体部分只有一条UPDATE语句。
6)建立与还书存储过程相对应的触发器,当借阅表中填入还书日期时,该触发器触发,自动修改所还图书的是否借出为‘否’。
2(4)问题及解决方案
1)问题一:步骤一中无法识别“seq_id”标识符 原因:未创建seq_id序列 解决方案:先创建该序列
2)问题二:步骤3无法执行
原因:已创建的table中无“借书”项
解决方案:将原代码中的“借书”改为“借阅” 3)问题三:步骤二中出现无法识别的符号 原因:将英文分号误写为中文分号 解决方案:修正为英文分号“;” 4)问题四:
原因:变量赋值过程中使用了错误的赋值语句 解决方案:将bnum改为图书编号
五、思考与总结
(4)在创建trigger之前应先创建sequence,避免出现序列号无法识别的错误(5)书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(6)注意区分中英文符号,避免出现符号无法识别以及程序没有结尾等错误(7)注意区别where和having的用法
(8)注意空格的使用,避免出现缺少或多余的空格,造成语法错误
六、附:实验源代码
(1)create sequence seq_借阅 start with 8 increment by 1 nomaxvalue nocycle nocache;create or replace trigger tr_借阅流水号 before insert on 借阅 for each row
begin
select seq_借阅.nextval into :new.借阅流水号 from dual;
end;
(2)create sequence seq_预约 start with 8 increment by 1 nomaxvalue nocycle nocache;create or replace trigger tr_预约流水号 before insert on 预约 for each row
begin
select seq_预约.nextval into :new.预约流水号 from dual;
end;
(3)create or replace procedure p_borrow_book_xg(p_jszh in number,p_tsbh in number)as v_sfjc 图书.是否借出%type;begin
select 是否借出 into v_sfjc from 图书 where 图书编号=p_tsbh;
if v_sfjc='否' then
insert into 借阅(借书证号,图书编号,借书日期)
values(p_jszh,p_tsbh,to_date(to_char(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD'));
--update 图书 set 是否借出='是' where 图书编号=p_tsbh;
commit;
else
dbms_output.put_line('该图书已经借出!');
end if;end;(4)create or replace trigger tr_借书 before insert on 借阅 for each row
begin
if inserting then
update 图书 set 是否借出='是' where 图书编号=:new.图书编号;
select seq_借阅.nextval into :new.借阅流水号 from dual;
end if;
end;(5)create or replace procedure p_return_图书(p_借书证号 in number,p_图书编号 in number)as begin
update 借阅 set 归还日期=to_date(to_char(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD'),罚款分类号=p_罚款分类号 where 借书证号=p_借书证号 and 图书编号=p_图书编号;
update 图书 set 是否借出='否' where 图书编号=p_图书编号;
commit;
end;(6)create or replace trigger tr_还书
after update
on 借阅
for each row begin
if updating then
update 图书 set 是否借出 = '否' where 图书编号 = :new.图书编号;
end if;end;
第五篇:数据库原理实验教案
《数据库原理》课程实验
实验1 创建数据库和数据表
一、实验目的
熟悉SQL Server Management Studio界面;掌握通过图形化向导和执行Transact-SQL语句创建数据库的方法。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
SQL Server中的一个数据库必须至少包含一个数据文件和一个事务日志文件,所以创建数据库就是建立主数据文件和日志文件。
在SQL Server 2005中创建数据库的方法主要有两种:一是在SQL Server Management Studio窗口中使用可视化界面,通过方便的图形化向导创建,二是通过执行Transact-SQL语句创建。
(一)向导方式创建
1、从“开始”菜单选择“所有程序”→“Microsoft SQL Server 2005”,打开“SQL Server Management Studio”窗口,使用Windows或SQL Server身份验证建立连接。
2、在“对象资源管理器”窗格中展开服务器,选择“数据库”节点右击,从弹出的快捷菜单中选择“新建数据库”命令,打开“新建数据库”窗口。
3、该窗口中有3个页,分别是“常规”、“选项”和“文件组”,完成这3个页的内容即可完成数据库的创建。这里,我们仅设置“常规”的相应内容,其他2个页的内容按照默认设置即可。
(1)“数据库名称”文本框中输入数据库的名称,如“sample_st”,再输入该数据库的所有者,这里使用默认值即可。(也可以通过单击文本框右边的“浏览”按钮选择所有者。
(2)“数据库文件”列表中包括两行,一个是数据文件,一个是日志文件。通过单击下面相应的按钮可以添加或删除相应的数据文件。
逻辑名称:指定该文件的文件名。
文件类型:用于区别当前文件是数据文件还是日志文件。 文件组:显示当前数据库文件所属的文件组。
初始大小:指定该文件的初始容量。在SQL Server 2005中数据文件的默认值为3MB,日志文件的默认值为1MB。 自动增长:用于设置在文件容量不够用时,文件根据何种增长方式自动增长。
路径:指定存放在文件的目录。默认情况下,SQL Server 2005将存放路径设置为其安装目录下的data子目录,单击该列中的按钮可以在打开的“定位文件夹”对话框中更改数据库的存储路径。
完成上述操作后,单击“确定”按钮关闭“新建数据库”窗口,即完成了数据库的创建,可以在“对象资源管理器”窗格中看到新建的数据库。
(二)语言方式创建
SQL Server 2005使用的Transact-SQL语言是标准SQL的增强版本,使用它提供的Create Database语句同样可以完成对数据库的建立(参考内容见附录)。
1、单击“新建查询”按钮,创建一个查询输入窗口将附录中的语句复制到该窗口。选择创建数据库的命令,单击工具栏中的“分析”按钮,可以检查语法错误;单击“执行”按钮即可执行语句,在查询窗口内的“查询”窗格中可以看到“命令已成功完成”的提示消息。在“对象资源管理器”窗格中刷新,即可看到新建的数据库。
2、继续执行Create Database之后的语句,在“sample_st”数据库中用Create Table命令依次建立Student、Course和SC这三个数据表,并建立各自的约束及它们之间的联系(外键),利用Insert命令为各数据表添加数据。
(三)知识巩固
用SQL-DDL语言创建“产品订购”数据库,包含四个数据表S、P、J和SPJ,表结构及内容见教材P122。
实验2 数据库的简单查询
一、实验目的
掌握单表查询中各个子句(Select、From、Where、Group、Having、Order)的用法,特别要掌握比较运算符和逻辑运算符的使用。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
在已建立的数据库和数据表的基础上,用Select语句完成下列查询操作。
1、查询全体学生的学号和姓名。
2、查询全体学生的所有基本信息(仅针对Student表)。
3、对SC表查询全体学生的选课记录,在显示结果中为“Grade”列增加5分。
4、查询全体学生的学号和姓名,将原来的英文列名设置中文别名。
5、显示所有选课学生的学号,去掉重复结果。
6、查询成绩在80分以上的学生选课记录。
7、查询经济系所有学生的学号和姓名。
8、查询成绩在80~90分的学生选课记录。
9、查询年龄不在22~25的学生记录。
10、查询所有姓“刘”的学生记录。
11、查询无考试成绩(成绩为空值)的学号、课程号。
12、查询考试成绩非空值的学号、课程号。
13、查询数学系年龄小于20岁的学生记录。
14、查询选修了“101”或“102”课程的选课记录。
15、查询学生总人数。
16、查询选修了课程的学生人数。
17、查询选修了“101”课程的学生的平均成绩。
18、查询学号为“01003”的学生的考试总成绩。
19、查询“101”课程的最高分和最低分。20、查询每门课程的选课人数。
21、查询每个学生的学号、选课数、平均成绩和总成绩。
22、查询选课数超过2的学生学号及其选课数。
23、查询所有学生信息,查询结果按年龄降序排列。(针对Student表操作)
24、查询所有学生信息,查询结果按系名升序,同系学生按年龄降序排列。
25、查询选课数超过2的学生学号及其选课数,查询结果按选课数降序排列。
实验3 数据库的多表查询
一、实验目的
继续熟练SQL-SELECT语句的使用;理解多表查询的概念;掌握多表连接查询中各个子句的用法,特别要比较内连接和外连接的结果。掌握非相关子查询、相关子查询的用法,理解它们的执行过程;学会在SQL Server中用Exists实现交运算,用Not Exists实现差运算。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
(一)、在已建立的数据库和数据表的基础上,用Select语句的连接查询完成下列操作。
1、查询每个学生的基本信息及其选课情况。
2、查询选修“101”课程的学生学号、姓名和成绩。
3、查询与“李平”在同一个系学习的学生记录。
4、查询与“李平”年龄相同的学生记录。
5、查询选修课程名为“数据库原理”的选课记录。
6、查询选修课程名为“数据库原理”的学生记录。
7、查询选修“101”课程且成绩≥90的学号、姓名和成绩。
8、查询“李平”的所有选课记录。
9、查询数学系学生选修的课程号,要求结果中去掉重复记录。
10、查询计算机系选修课程数≥2的学号、姓名及平均成绩,查询结果按平均成绩降序。
11、查询每个学生的学号、选修课程号、课程名及成绩。
12、查询所有学生的选修情况(包括选课和未选课的学生),要求显示学号、姓名、课程号和成绩。
(二)、在已建立的数据库和数据表的基础上,用Select语句的嵌套查询完成下列操作(含EXISTS量词)。
1、查询选修“101”课程且成绩≥90的学号、姓名。
2、查询“李平”的所有选课记录。
3、查询与“李平”在同一个系学习的学生记录。
4、查询与“李平”年龄相同的学生记录。
5、查询选修课程名为“数据库原理”的选课记录,输出结果包括学号和成绩。
6、查询选修课程名为“数据库原理”的学生记录,输出结果包括学号、姓名和所在系。
7、查询学号为“01003”学生的选修课程号和课程名。
8、查询没有选修“101”课程的学生学号和姓名。
9、查询选修“101”课程或“102”课程的学生姓名。
10、查询选修“101”课程和“102”课程的学生学号。
11、查询选修“101”课程但没选修“102”课程的学生学号。
12、查询没有选修任何课程的学生记录,输出结果包括学号、姓名和所在系。
13、查询数学系学生选修的课程号,要求结果中去掉重复记录。
14、查询选修课程至少包含“01003”选修课程的学生学号。实验4 数据库更新、视图定义及使用
一、实验目的
掌握Insert、Update、Delete语句的使用;对于Insert语句,要求理解默认值约束、空值约束在插入记录时所起的作用。理解视图的概念,掌握Create View、Drop View等语句的使用;掌握基于视图的查询语句的使用。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
(一)、在已建立的数据库和数据表的基础上,向数据库中添加一个临时表ST(sno,sname,dept,sage,cno,cname,score)。用Insert语句向临时表输入数据,输入有误时用Update语句进行修改。再用三个更新语句完成下列操作。
1、向Student表添加若干新记录,内容自定。(观察已定义的表的约束情况)
2、向SC表添加新记录,内容自定,不低于10条(注意不能违反参照完整性)。
3、为临时表ST添加记录。
4、把Student表的所有行及其对应的选课一次性地加到临时表ST中。
5、在ST表中把所有学生的成绩加2分。
6、在ST表中把所有学生的年龄增加1。
7、在ST表中把“李平”的所在系改为“计算机”。
8、在ST表中将选修课程“数据库原理”的学生成绩加2分。
9、在SC表中删除所有成绩为空值的选修记录。
10、删除计算机系选修成绩不及格的选课记录。
(二)、在已建立的数据库和数据表的基础上,完成下列操作。
1、建立数学系学生的视图MAST。
2、建立计算机系选修课程名为“数据库原理”的学生视图,视图名:CSTVIEW,该视图中应包括属性列:学号、姓名、成绩。
3、创建一个名为STSUMVIEW的视图,包括所有学生的学号和总成绩。
4、建立学生选课视图SCVIEW,包括所有学生的学号、姓名、课程号、课程名和成绩。
5、通过MAST视图查询学生基本信息。
6、通过SCVIEW查询成绩大于90分的学生的学号和成绩。
7、查询计算机系选修课程名为“数据库原理”并且成绩大于85分的学生的学号和成绩。
8、通过MAST视图将学号为“01008”学生的年龄修改为21岁。
9、通过MAST视图将学号为“01009”学生所在系改为“经济”,是否能成功执行?若不能成功请说明理由;若修改成功,请再次通过MAST视图查询学生基本信息,是否能查询到该生?若不能查询请说明理由。
10、通过SCVIEW视图将学号为“01004”学生的总成绩修改为380分,是否能成功执行?若不能成功请说明理由。
实验5 数据库的安全与保护
一、实验目的
理解SQL Server的用户与权限管理机制,掌握用对象资源管理器创建服务器登录帐号,并同时建立用户。掌握如何为给定的用户分配权限。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
用户与权限管理
(1)打开“SQL Server Management Studio”窗口,使用对象资源管理器创建两个服务器登录帐号Test1和Test2,并在“sample_st”数据库中创建两个对应的同名用户。设置Test1用户和Test2用户的默认架构为guest。
(2)使用Test1身份登录,并为Test2分配创建数据表的权限;用Test2身份登录来验证权限分配成功。
(3)使用Test1身份登录,收回刚刚分配给Test2的创建数据表的权限;用Test2身份登录来验证权限回收成功。
五、实验步骤
1、使用对象资源管理器创建两个服务器登录帐号。以系统管理员身份登录SQL Server。打开“SQL Server Management Studio”窗口,在对象资源管理器列表中,打开展开“安全性”文件夹,选择“登录名”图标,单击鼠标右键,在弹出的菜单中选择“新建登录名”。在打开的对话框中依次建立Test1和Test2,选择“SQL Server身份验证”,同时还要输入密码,默认数据库为“sample_st”。
(2)在“用户映射”中列出了当前登录帐号可以选择访问的数据库如“sample_st”,在其左侧的复选框中打勾,表示当前登录帐号可以访问对应的数据库,默认用户名与登录帐号相同。
(3)单击“确定”按钮完成创建。
2、创建新的数据库用户。
在对象资源管理器中选中要访问操作的数据库,展开“安全性”文件夹,在“用户”文件夹中查找是否已建立与登录名Test1和Test2同名的数据库用户,若已建立,则在属性中修改其默认架构为guest;否则右击鼠标在菜单中选择“新建用户”选项,出现“数据库用户-新建”对话框,建立相应的用户。
3、用Grant、Revoke命令实现对用户的授权和收权。
4、用Create命令创建数据表验证授权和收权是否成功。
5、以系统管理员身份登录SQL Server。使用:“GRANT SELECT ON SC TO Test1 WITH GRANT OPTION”命令,再分别以Test1和Test2身份登录,进行授权及查询数据表,验证“WITH GRANT OPTION”能否成功执行。
6、以系统管理员身份使用“REVOKE”命令回收上述授权。
实验6 数据库的事务及并发控制
一、实验目的
通过实验加深学生对事务的基本概念理解语掌握;加深学生对并发控制的基本概念理解,认识不正确的并发控制所带来的危害;加深学生对锁的基本概念的掌握与理解,认识锁带来的问题;
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
1、事务的控制
数据准备:执行如下命令Select * into ##temp from student,将student的数据倒入到##temp表中。 启动事务,执行删除后,回滚事务
选择##temp的数据,察看记录总数 显式启动事务 删除##temp表的数据
选择##temp数据,察看记录总数 回滚事务
选择##temp数据,察看记录总数
启动事务,执行删除后,提交事务
选择##temp数据,察看记录总数 显式启动事务 删除##temp表的数据
选择##temp的数据,察看记录总数 回滚事务
选择##temp数据,察看记录总数
比较这两次执行效果的差异,为什么会有这些差异?
2、事务的隔离级别试验
数据准备:执行如下命令Select * into ##temp from student,将student的数据倒入到##temp表中。 脏读
启动两个分析器,分别叫(A,B)
在A中,选择##temp表中数据,察看记录总数 在A中,显式启动事务 在A中,删除##temp表的数据
在B中,将事务隔离级别设为UNCOMMITTED 在该查询分析器中选择##temp表数据,察看记录总数 回到先前窗口,回滚事务 选择##temp数据,察看记录总数 再次切查询分析器窗口
选择##temp数据,察看记录总数 观察结果,为什么会有这些现象? 不可重复读
启动两个分析器,分别叫(A,B)
在A中,显式启动事务,察看dept = 'math'的记录(注意地址中的数据)
在B中,显式启动事务,察看dept = 'math'的记录。在B中,将dept = 'math’地址更新为’AAAAAA’
在B中,再次察看dept = 'math'的记录。在B中,提交事务 在A中,再次察看dept = 'math'的记录。 在A中,提交事务
观察结果,为什么会有这些现象? 丢失修改
启动两个查询分析器,分别叫(A,B)
在A中,显式启动事务,察看dept = 'math'的记录(注意地址中的数据)
在B中,显式启动事务,察看dept = 'math'的记录。 在B中,将dept = 'math’地址更新为’AAAAAA’ 在B中,再次察看dept = 'math'的记录。 在B中,提交事务
在A中,再次察看dept = 'math'的记录。 在A中,将dept = 'math’地址更新为’BBBBBB’ 在A中,提交事务
在A,B窗口分别察看dept = 'math’的记录,结果如何? 锁的模拟
启动两个分析器,分别叫(A,B)
在A中,显式启动事务,察看dept = 'math'的记录 在B中,显式启动事务,察看dept = 'math'的记录 在B中,将dept = 'math’地址更新为’AAAAAA’ 在A中,将dept = 'math’地址更新为’BBBBBB’ 观察A窗口的结果,为什么?
事务隔离级别设置:set transaction isolation level {read committed, read uncommitted, repeatable read, serializable}
实验7 数据库设计实验
一、实验目的
通过实验掌握数据库设计的基本方法和步骤。
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
1、选定实验题目,为某个单位或部门设计数据库应用系统,比如:学生成绩管理、机房上机管理、职工档案管理、商品库存管理、图书管理、工资管理等。
2、根据选定的题目进行需求分析,重点分析数据需求和功能需求。
3、概念结构设计:画出E-R图。步骤如下:
(1)设计局部E-R图。设计依据是需求分析阶段的DFD/DD。主要内容是确定实体集合、联系、属性及主关键字
(2)集成局部E-R图。集成时要解决冲突和冗余等问题。(3)合并局部E-R图。合并局部E-R图中相同部分,尽可能的保留特殊部分,删除冗余部分,用累加的方式集成若干个局部E-R图。
(4)优化全局E-R图,得到最佳的全局E-R图方案。
4、逻辑结构设计:设计数据库和数据表的具体结构,指出各表的属性名称、数据类型;说明各表的主码及表之间的关联情况;说明本设计是否已达到3NF要求。
5、简要评价系统设计的优点和不足。
五、实验要求
1、提交设计报告,涵盖实验内容的全部信息,不低于1000字。
2、提交建立应用系统数据库的代码,所有数据表中的记录总数不低于50条。
实验8 存储过程实验
一、实验目的
通过实验熟悉使用存储过程进行数据库应用程序设计的方法
二、实验环境
Windows XP操作系统,SQL Server 2005软件。
三、实验课时
2课时。
四、实验内容
对sample_st数据库,编写存储过程,完成下面功能
1、统计任意一门课程的平均成绩
2、统计所有课程的平均成绩
3、统计任意一门课程的成绩分布情况,即按照分数段统计人数(即<60、60-69、70-79、80-89、90以上)