信息工程学院
实 验 报 告
课程名称     数据库原理           
实验序号       3                   
实验项目     数据更新和创建登录及用户   
实验地点                    
实验学时       实验类型   验证性 
指导教师     实 验 员      
专 业   班 级      
学 号       姓 名      
  年    月    日
成绩:A
教师评语
该学生的实验报告格式正确,步骤详细,内容丰富,具体地展示了自己的思考过程,实验结果正确,很好地把课堂所学知识应用于实际操作中。
一、实验目的及要求
1、掌握SQL数据更新的方法;
2、了解和掌握视图的修改方法;
3、掌握创建用户、授权和回收用户权限的方法。
实验原理与内容
1、SQL的数据更新包括插入(insert)、修改(update)和删除(delete)数据三条语句。
(1)插入数据的格式为
insert
into <表名>[(<属性列1>[,<属性列2>...])]
select子查询语句
(2)修改数据的格式为
update <表名>
set <列表名1>=<表达式1>[,<列表名2>=<表达式2>...]
[where <条件>]
(3)删除数据的格式为
Delete
From<表名>
[where <条件>]
2、视图
视图是关系数据库系统提供给用户以多种角度观察数据库中数据的一种重要方法。视图是从一个或几个基本表(或视图)导出的一个虚拟表。视图一经定,就可以和基本表一样被查询、被删除,也可以在若干视图之上再定义新的视图,当然,视图完成数据的更新(增加、删除、修改)操作有一定的限制。其规则主要有以下三条
1) 如果一个视图是从多个表使用连接操作导出的,那么不允许对这个视图执行更新操作。
2) 如果在导出视图的过程中使用了分组和集函数,也不允许对这个视图执行更新操作。
3) 如果一个视图是从单个基本表使用选择和投影,操作导出且视图的属性集包含了基本表的一个候选键,这种视图称为“行列子集视图”,那么允许对这个视图执行更新操作。
3、SQL控制用户对数据的存取权限,DBMS提供了以下功能:
1)由DBA创建允许访问数据库的用户(登录名)。
2)由DBA为每个登录名赋予恰当的角和成员身份并指定可以连接的数据库。
3)由DBA把可访问的数据对象和操作权限授予指定用户,这个过程称为授权。可用sQL的GRANT命令来完成。若要撤销某个用户的权限,可用REVOKE命令实现。
4)DBMs把授权或撤销权限的结果存入数据字典。
5)当用户提出操作请求时,DBMS进行授权情况检查,以决定是否执行用户的操作请求。
、实验软硬件环境
装有Microsoft SQL Server 2008 Management Studio的电脑
实验过程(实验步骤、记录、数据、分析)
1、实验准备:在实验一的基础上(包括数据库的建立、定义表和添加表内容)进行实验。下面分别为depts表、students表、courses表、reports表。
2、数据的更新:插入数据、修改数据、删除的数据
3、视图的定义、查询和更新
4、创建用户、授权和收回权限
测试/调试及实验结果分析
1、数据更新
(1)插入数据
1.1数据库中已有一个关系History_Student,其关系模式与Students完全一样,试将关系Students中的所有元组插入到关系History_Student中去,其SQL命令为:
insert
into history_student
select*
from students
运行结果如右图,首先要新建一个空的名为history_student的表,然如执行查询命令。
(2)修改数据
2.1将学号为“S03”的学生年龄改为22岁,即要修改满足条件的一个元组的属性值。其命令为
update students
set sage=22
where sno='s03'
执行select * from students,运行结果如右图
2.2将所有学生的年龄增加1岁。即要修改多个元组的值。其命令为
update students
set sage=1+sage
执行上述命令后,执行select * from students,运行结果如右图,与上一题对比,每个学生的年龄都增加了1岁。
2.3将数学系所有学生的成绩置零.其命令为
update reports
set grade=0
where 'd01'=
          (select dno
          from students
          where students.sno=reports.sno
          )
执行上述命令后,执行select * from reports,运行结果如右图
(3)删除数据
3.1 删除学号为“S04”的学生选修的课号为“C02”的记录。其命令为
delete
from reports
where sno='s04' and cno='c02'
执行上述命令后,执行select * from reports,运行结果如右图
3.2删除系别编号为d03的所有学生的选课记录。其命令为
delete
from reports
where 'd03'=
(select dno
from students
where students.sno=reports.sno
)
执行上述命令后,执行select * from reports,运行结果如右图
2、视图
(1)定义视图
建立视图
1.1建立系别编号为d03学生的视图,并要求进行修改和插入操作时仍需保证该视图只有d03的学生,视图的属性名为Sno,Sname,Sage,dno。其命令为
create view c_students
as
select sno,sname,sage,dno
from students
where dno='d03'
with check option
执行上述命令后,执行select * from c_students,运行结果如右图
1.2建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)的视图。
本视图由三个基本表的连接操作导出,其SQL语句如下:
select * from c_students
create view student_cr
as
select students.sno,sname,cname,grade
from students,reports,courses
where students.sno=reports.sno and reportso=courseso
执行上述命令后,执行select * from student_crs,运行结果如右图
1.3定义一个反映学生出生年份的视图。其命令为
create view student_birth(sno,sname,sbirth)
as select sno,sname,2017-sage
from students
执行上述命令后,执行select * from student_birth,运行结果如右图
删除视图
1.4删除视图Student_CR,其命令为
drop view student_cr
运行结果如右图
(2)查询视图
2.1在数学系的学生视图C_Student中出年龄(Sage)小于20岁的学生姓名(Sname)和年龄(Sage)。其命令为
select sname,sage
from c_students
where sage < 20
运行结果如右图
2.2在Student_CR视图中查询成绩在85分以上的学生学号(Sno)、姓名(Sname)和课程名称(Cname)。其命令为
SELECT  Sno, Sname, Cname
  FROM student_cr
WHERE  Grade>85
运行结果如右图
(3)更新视图
3.1将系别编号为d03的学生视图C_Student中学号为S05的学生姓名改为“黄海”。其命令为
UPDATE  c_students
SET  Sname='黄海'
WHERE  Sno='S05'
运行结果如右图
3.2向系别编号为d03的学生视图C_Student中插入一个新的学生记录,其中学号为“S09”,姓名为“王海”,年龄为20岁。其命令为
INSERT
INTO  C_Students
VALUES ('S09', '王海', 20, 'd03')
运行结果如右图
3.3 删除d03系的学生视图C_Student中学号为“S09”的记录。其命令为
DELETE
FROM  C_Students
sql server两种身份验证模式
WHERE  Sno='S09'
运行结果如右图
2、数据控制
(1)创建用户
1 修改SQL Sever的身份认证模式
利用SSMS工具设置sqlserver身份验证模式的步骤如下
1)打开SSMS,右击对象资源管理器中的数据库服务器名称,
2)在出现的快捷菜单中依次选择“属性” “服务器属性”“安全性”,选择“SQL Sever和Windows身份验证模式(S)”,如下图所示,单击“确定”。
2 创建登陆
打开SSMS,点击对象资源管理器中的“安全性”对象,依次单击“新建”-“登陆”,出现“登录名-新建”窗口。选择常规,在右边窗口输入登陆名和登陆密码。本实验创建了登录名为rjh,登陆密码为rjh111.
在“用户映射”上选中数据库student_mis前面的复选框。
(2)授权
在数据库上创建了user1,user2,user3,user4,user5,user6
2.1把对students表的全部操作权限授予user1,user2,其命令为
GRANT ALL PRIVILEGES
ON students
TO user1,user2
执行代码之后,登陆user1\user2用户,查看数据库中,只有students表,执行select *from students,查询出students表的所有内容,还可以对表内容进行修改。
2.2把对基本表reports的查询权限授予所有用户,其命令为
GRANT select
ON reports
TO public
执行代码之后,登陆任一用户,查看数据库中都存在reports表,执行select *from reports,查询出reports表的所有内容,但是不能对表进行修改。
2.3把查询students表和修改学生姓名的权限授给用户3,其命令为
GRANT update(sname),select
ON students
TO user3
执行代码之后,登陆user3,查看数据库中,存在students表.
这实际上是授予user3用户对基本表student的SELECT权限和对属性列sname的UPDATE权限。授予关于属性列的权限时必须明确指出相应属性列名。
2.4把对表Reports的INSERT权限授予User4用户,并允许他将此权限授予其他用户。此SQL语句为
GRANT insert
ON reports
TO user4
with grant option
执行代码之后,登陆user4,查看数据库中存在reports表。执行插入(insert)命令和查询命令,显示插入了新的元组。
(4)收回权限
4.1把用户3修改学生姓名的权限收回。其命令为
revoke update(sname)
on students
from user3
运行结果如右图
4.2收回所有用户对基本表reports的查询权限。其命令为
revoke select
on reports
from public
运行结果如右图
收回权限之后,登陆任一用户,执行select *from reports命令,显示没有权限。
、实验结论与体会
  通过实验,我掌握了对数据库中的数据进行修改的方法,懂得了如何创建用户,并修改用户权限和收回权限的方法,对于今后的工作和学习都有很大的帮助。
年    月  日

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。