数据库的查询实验实验报告.docx
《数据库的查询实验实验报告.docx》由会员分享,可在线阅读,更多相关《数据库的查询实验实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
![数据库的查询实验实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/28/9330a24e-664a-440c-ac4d-1ef613b38c33/9330a24e-664a-440c-ac4d-1ef613b38c331.gif)
数据库的查询实验实验报告
数据库的查询实验
——实验报告
学号:
姓名:
班级:
2009211207
班内序号:
专业:
电子科学与技术
报告提交日期:
2011/12/13
一、实验目的
二、实验环境
三、主要设计思想与实验步骤
四、实验结果、实验用例、实验结果截屏
五、实验总结
一、实验目的
1.掌握数据库完整性的定义
2.学会向数据库中添加角色与用户并设置权限的方法、
二、实验环境:
编程环境:
Microsoftsql2008
操作系统:
Win7homebasic
三、主要设计思想与实验步骤
根据实验要求,分别使用Transact-SQL语句和企业管理器设置各表的外键和主键。
然后根据之前学会的知识对各表进行插入、删除、更改等操作,观察之前设置的主键与外键等规则对操作的影响。
在安全性实验中,新建一个登陆账号,然后在相应的数据库下新建一个用户并赋予相应的权限。
在相应的数据库下新建带有权限的数据库角色并赋予给用户。
登陆新建的用户对数据库进行操作。
四、实验结果(测试用例、实验结果截屏)
完整性实验与要求:
1、分别定义数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束;
在之前的实验中,我们已经给各表设置过主键,部分表设置过外键。
设置表class的外键department_id的截图:
图一
设置表student_course的外键course_id的SQL代码如下:
altertable[dbo].[student_course]
addforeignkey(course_id)referencescourse(course_id)
执行结果如下:
图二
原因是student_course表中有如下的数据,表中的course_id在course表中不存在。
图三
从表中删除这两组数据之后,设置外键则可以成功。
2、向学生表插入具有相同学号的数据,验证其实体完整性约束;
Student表中原有数据如下:
图四
使用Transact-SQL语句插入如下:
insert
into[dbo].[student](student_id,student_name)
values('g9940201','孙彦巧')
执行结果(1行受影响)
图五
3、向学生表中插入一条数据,班级号是学生表的外键,验证参照完整性约束;
使用Transact-SQL代码插入如下:
insert
into[dbo].[student](student_id,student_name,class_id)
values('g9940305','孙彦巧','g99404')
因为班级号g99404在class表中不存在,由于class_id的外键约束,插入不成功,结果截屏如下:
图六
4、删除教师表中的所有数据,验证参照完整性约束;
使用Transact-SQL代码删除如下:
delete
from[dbo].[teacher]
因为teacher表为teacher_course_class表外键的参照表,所以删除不成功,实验结果截屏如下:
图七
5创建一个规则,将其绑定到Student表的Sex列上,保证输入的性别值是0或1
由于微软在SQLServer2005及以上的版本中已经决定启用规则和默认,所以不能用企业管理器创建规则和默认值,只能用Transact-SQL语句实现。
创建规则语句如下:
createrulesex01
as@sex=0or@sex=1
绑定规则语句如下:
executesp_bindrule'sex01','student.sex'
实验结果截屏如下:
图八
6、为Student表增加一列,命名为dept,创建一个默认对象,将其绑定到Student表的dept列上,使其默认值为电子院。
为student表增加一列dept,使用Transact-SQL语句实现如下:
altertable[dbo].[student]
adddeptchar(10)NULL
创建默认对象语句如下:
createdefault[dbo].[dept]
as'电子院'
绑定默认对象语句如下:
sp_bindefaultdept,'student.dept'
实验结果截屏如下:
图九
安全性实验内容与要求:
1、定义一新的登录帐号、数据库用户,并授予其访问学生选课数据库的读权限;
使用Transact-SQL语句创建登陆账号shih,再创建数据库用户shihexp使用shih作为登陆名,并授予访问学生选课数据库的读权限的代码如下:
createloginshihwithpassword='111111'
useexp02
createusershihexpforloginshih
grantselectonbooktoshihexp
grantselectonclasstoshihexp
grantselectoncoursetoshihexp
grantselectondepartmenttoshihexp
grantselectonstudenttoshihexp
grantselectonstudent_coursetoshihexp
grantselectonteachertoshihexp
grantselectonteacher_course_classtoshihexp
使用企业管理器操作的实验截图如下:
首先,在服务器的“安全性”,“新建”上右键选择“新建登录名”。
设置登录名等如下图:
图十
设置完成后,登陆名下有新建的名为“sanqiao”的项目。
在数据库Buptsyq中的“安全性”,“用户”上右键选择“新建用户”。
设置如下图:
图十一
设置完后,数据库Buptsyq中有新建的用户“yanqiao”。
图十二
2、分别采用WindowsNT/2000验证方式和WindowsNT/2000及混合验证方式用不同的用户进行登录连接;
使用WindowsNT/2000验证方式登录原有用户截图如下:
图十三
使用WindowsNT/2000混合验证方式登录用户“yanqiao”的截图如下:
图十四
3、分别用sa用户和新定义的用户访问学生数据库,并对其中的学生表数据进行修改;
使用sa用户访问操作,在student表中新增一条条目的实验截图如下:
图十五
如上图,新增条目的操作成功。
然后使用Transcat-SQL语句更改数据代码如下:
update[dbo].[student]
setstudent_name='彦巧'
wherestudent_name='孙彦巧'
实验截图如下:
图十六
使用新定义的用户yanq访问操作的实验截图如下:
图十七
如上图,yanq仅对该数据库有访问的权限,所以视图更改course表的数据时会被拒绝,截图如下:
图十八
4创建数据库角色,并授予访问数据库的读、写权限;
使用Transact-SQL语句创建角色newrole的代码如下:
useBuptsyq
createrolenewrole
grantselect,insert,delete,updatetonewrole
创建成功后数据库Buptsyq的角色如下:
图十九
使用企业管理器创建的步骤如下:
在“数据库角色”上右键,选择“新建数据库角色”
图二十
设置如下,角色名称设为newroletemp,架构为db_datareader和db_datawriter:
图二十一
设置成功后,数据库角色列表如下:
图二十二
5、将角色赋予
(1)中定义的用户,建立用户和角色联系;
在数据库Buptsyq的用户yanqiao上进行编辑,它的“数据库角色成员身份”为刚刚创建的newrole,如下图:
图二十三
6、再次用此用户访问学生数据库,并对其中的学生表数据进行修改。
用用户yanqiao登陆后,student表内的数据如下:
图二十四
修改数据的Transact-SQL语句如下:
insert[dbo].[student](student_id,student_name,sex)
values('g990406','小王',1)
修改后的student表数据如下,因为已经赋予了权限,故可以修改成功:
图二十五
四、实验总结
此次实验让我更加深入地了解了如何对数据库进行完整性及安全性的控制,以及如何对数据库进行有效的维护。
通过这五次实验,我掌握了对数据库的使用、控制及维护方法,对SQLServer2008有了一定的熟练度。
在实验的过程中也遇到了很多问题,不过通过与同学以及助教老师交流后最终得以解决。
自己从刚开始接触数据库到可以进行简单的数据操作以及数据库的维护这个过程是坎坷但充满快乐的。
相信以后还会较多的用到数据库的相关知识。