第一篇:sql 数据库 实验九:T-SQL语言、存储过程及数据库的安全性
实验九:T-SQL语言、存储过程及数据库的安全性
一、实验目的1.掌握数据变量的使用;
2.掌握各种控制语句及系统函数的使用;
3.掌握存储过程的实现;
4.掌握混合模式下数据库用户帐号的建立与取消方法;
5.掌握数据库用户权限的设置方法;
6.掌握在企业管理器中进行备份、恢复操作的步骤;
二、实验学时
2学时
三、实验要求
1.了解T-SQL支持的各种基本数据类型及变量的使用;
2.了解T-SQL各种运算符、控制语句及函数的功能及使用方法;
3.掌握存储过程的编写和运行方法
4.熟悉数据库完全备份及恢复的方法;
5.了解SQL Server 2008系统安全;
6.熟悉数据库用户、服务器角色及数据库角色的用法
7.完成实验报告。
四、实验内容
以student数据库为基础数据,完成以下内容
1.变量及函数的使用:
1)创建局部变量@xh(学号)并赋值,然后输出数据表student中所有等于该值的学生的学号、姓名、性别、所属院系及年龄等信息;
2)将学号为200515008的学生的姓名赋值给变量@name;
3)计算学生信息表student中学生最高年龄和最低年龄之差,并将结果付给@cz;
4)定义一函数,按系别统计当前所有学生的平均年龄,并调用该函数。
5)定义一函数,通过姓名查询某学生的学号、性别、年龄、系别、选修课程名及成绩。
2.编写并执行存储过程
(1)创建一个无参存储过程pr_StuScore,查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。
(2)创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的选修课程及成绩信息。
(3)创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生
编号和课程名称查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。
(4)编写带参数的存储过程,根据传入的课程名称统计该课程的平均成绩。
3.*对数据库student进行完全备份和恢复操作;
4.*以系统管理员身份登录到SQL Server服务器,在SQL Server2008界面中实现以下操作
1)在当前计算机中增加一个用户zhang,密码为secret。使此用户通过windows
模式下登录SQL Server服务器,登录名为zhang;
2)新建以混合模式登录SQL Server服务器的用户登录名分别为stu1、stu2和
stu3,登录密码为secret,默认登录数据库为student;
3)在数据库student中创建用户zhang,登录帐号为zhang;
4)在数据库student中创建用户stu1、stu2和stu3,登录帐号为stu1、stu2
和stu3;
5)给数据库用户zhang赋予创建数据表的权限;
6)给数据库用户stu1赋予对sc表进行插入、修改、删除操作权限;
7)给数据库用户stu2和stu3赋予对student表、course表所有操作权限及查
询sc的操作权限,并允许再授权给其他用户;
8)撤销数据库用户stu2对student表和course表的删除操作的权限;
五、实验步骤
3.对数据库student进行完全备份和恢复操作;
1)对数据库student进行完全备份操作;
以管理员账号登录SQL Server并运行SQL Server资源管理器;以下方法任选其一
方法1:利用资源管理器进行备份
(1)打开【对象资源管理器】,在【服务器对象】节点下找到【备份设备】节点,单击鼠标右键,弹出右键菜单,选择【新建备份设备】菜单,弹出新建备份设备窗口。输入备份设备逻辑名称data_backup,并指定备份设备的物理路径,例如“D:backupdata_full.bak”,单击【确定】。
(2)连接到相应的SQL Server服务器实例之后,在【对象资源管理器】中,单击服务器名称以展开服务器树。找到【数据库】节点展开,选择STUDENT
数据库,单击鼠标右键,在弹出的快捷菜单中选择【任务】—>【备份】命令。
(3)在【备份数据库】对话框中的【数据库】下拉列表中选择的数据库名STUDENT。在【备份类型】下拉列表中选择备份类型为“完整”,在【名称】文本框中输入备份集的名称STUDENT_BAK,在【备份集过期时间】选项中指定备份集过期时间为30天,在“选择页”窗格中,单击【选项】,在【可靠性】选项中选择“完成后验证备份”选项,最后单击【确定】按钮。
方法2:用T-SQL语句进行数据库完全备份
使用逻辑名STUDENTBAK创建一个命名的备份设备,并将数据库STUDENT完全备份到该设备。在查询分析器的窗口输入如下的语句并执行:
USE master
EXEC sp_addumpdevice ‘disk’,’ STUDENTBAK’,’D:backup STUDENTBAK.BAK’
BackUp DataBase STUDENT To STUDENTBAK
2)在资源管理器中进行数据库恢复;
(1)展开【数据库】节点,用鼠标右键单击STUDENT,在弹出的快捷菜单中选择【属性】命令。打开“数据库属性”对话框,在“选择页”列表中,单击“选项”。在“恢复模式”下拉列表中选择【完整】恢复模式。
(2)用鼠标右键单击STUDENT,在弹出的快捷菜单中选择【任务】—>【还原】—>【数据库】命令。打开“还原数据库”对话框。在“常规”选项卡上,“目标数据库”下拉列表框中选择STUDENT。在“目标时间点”文本框中,使用默认值“最近状态”。在“选择用于还原的备份集”表格中,选择用于还原的备份,单击“确定”按钮。
4.*以系统管理员身份登录到SQL Server服务器,在SQL Server2008界面中实现以下操作
1)在当前计算机中增加一个用户zhang,密码为secret。使此用户通过windows
模式下登录SQL Server服务器,登录名为zhang; 在计算机中增加用户的方法如下:单击【开始|管理工具】,选择【计算机管理】,在【计算机管理】的窗口中单击左边的【本地用户和组】,在右侧【用户】文件夹上单击右键,选择菜单上的【新用户】,然后在弹出的【新用户】对话框中键入您准备使用的用户名、密码,然后清除【用户下次登录时须更改密码】复选框的选中状态,再单击【创建】按钮,然后单击【关闭】按钮关闭对话框。
创建windows身份验证登陆用户方法:在【对象资源管理器】中,展开【安全性】节点,然后右键单击【登录名】,在弹出的快捷菜单中选择【新建登录名】。在“登录名-新建”对话框中单击【登录名】后面的搜索按钮,选择
【高级】,在弹出的对话框中选择【立即查找】,在搜索结果中选择已经建立的用户名,单击【确定】按钮,回到“登录名-新建”对话框中,最后单击确定按钮完成创建。
2)新建以混合模式登录SQL Server服务器的用户登录名分别为stu1、stu2和
stu3,登录密码为secret,默认登录数据库为student;
创建SQL Server身份验证登陆用户方法:在【对象资源管理器】中,展开
【安全性】节点,然后右键单击【登录名】,在弹出的快捷菜单中选择【新建登录名】。在“登录名-新建”对话框中选择SQL Server身份验证选项,在【登录名】后面输入用户名,在密码及确认密码后面输入密码。取消【强制密码过期】选项,单击【确定】按钮。
3)在数据库student中创建用户zhang,登录帐号为zhang;
在【对象资源管理器】中展开student数据库节点,展开【安全性】节点,在用户上单击鼠标右键选择【新建用户】命令,在弹出的新建对话框中单击
【登陆名】后面的搜索按钮,在弹出的【选择登录名】对话框中单击【浏览】按钮,在相应的账号前面选中并单击【确定】按钮,最后在用户名后面输入用户名称,单击【确定】按钮完成创建。
CREATEUSERzhang for login zhang
4)在数据库student中创建用户stu1、stu2和stu3,登录帐号为stu1、stu2
和stu3;
CREATEUSERstu1 for login stu1
5)给数据库用户zhang赋予创建数据表的权限;
在student数据库安全性节点下的用户名上单击鼠标右键,选择【属性】,在打开的对话框中选择【安全对象】页,单击右边的【搜索】按钮,在弹出的【添加对象】对话框中直接单击【确定】按钮,然后单击【对象类型】按钮,弹出【选择对象类型】对话框,选中【数据库】,单击【确定】按钮。再在选择对象对话框中单击【浏览】,在student数据库前面选中,单击【确定】。最后在【安全对象】页下方的student的权限中创建表选项后的【授予】复选框中选中,单击【确定】完成设置。
GRANTcreatetabletozhang
6)给数据库用户stu1赋予对sc表进行插入、修改、删除操作权限;
GRANT insert,update,delete ONsc to stu
17)给数据库用户stu2和stu3赋予对student表、course表所有操作权限及查
询sc的操作权限,并允许再授权给其他用户;
GRANTALL PRIVILEGESONStudent,CourseTOstu2,stu3
WITH GRANT OPTION
8)撤销数据库用户stu2对student表和course表的删除操作的权限;
RevokedeleteON Student,CourseFROM stu2 CASCADE
第二篇:数据库sql语言总结
插入句型:
insertinto<表名> [各属性名]values(<常量1>,<常量2>……)
删除元组或者二维表:
delete from<表名>[ where <条件> ]
删除属性:
altertable<表名>dropcolumn<列名>
增加某表的属性:
altertable<表名>add<列名> 类型
修改句型:
update<表名>set<列名> =<表达式>[where<条件>]
修改某表当中的属性类型:
altertable<表名>altercolumn<列名><转换的类型>;
显示表的一些基本情况
EXEC sp_help'<表名>'
更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称 sp_rename ‘<旧的表名>’, ‘<新的表名>’
修改表的列名 sp_rename'<表名>.
小注:上面的语句最后不需要加分号
判断表中是否存在某列的语句
if exists(select * from syscolumns where id = object_id('stu')and name='Sno')
print 'stu exists'
else print 'stu not exists'
将表中的某列设置为主码:
alter table stu addSno char primary key;
判断表是否存在if exists(select count(*)from sysobjects where type='U' and name='stu')
查询某个表中字段的列名和数据类型
select column_name,data_type from information_schema.columns where table_name = '表名';
第三篇:数据库实验报告 SQL语言
数据库原理及实验报告
实验6 视图
实验目的:1)掌握交互式创建、删除视图的方法
2)掌握使用SQL创建、删除视图的方法
3)掌握交互式更新视图的方法
4)掌握使用SQL更新视图的方法 实验内容
6.1实验题目:创建视图
实验过程:1)交互式创建视图VIEW_S
2)交互式创建成绩视图VIEW_SCORETABLE
3)使用SQL创建课程表视图VIEW_CTABLE
实验结果:
6.2实验题目:修改视图
实验过程:1)使用交互式方法把视图VIEW_S中的字段SNO删掉
2)使用SQL为视图VIEW_CTABLE增加一个课时字段CT tiny int
实验结果:
6.3实验题目:通过视图修改数据库数据
实验过程:1)交互式通过修改视图VIEW_S中的数据来实现对其基本表S中数据的修改
2)对视图VIEW_S执行INSERT语句,查看此视图的基本表S中数据的变化
3)修改视图VIEW_S的定义,使其包含表S中的主键,再执行插入操作
4)用SQL语句对视图VIEW_S执行DELETE操作,查看此视图的基本表S中数据的变化 实验结果:
6.4实验题目:删除视图
实验过程:1)交互式删除视图VIEW_S
2)使用SQL删除视图VIEW_CTABLE
实验结果:
实验7 数据查询
实验目的:1,掌握从简单到复杂的各种数据查询。包括,单表查询、多表连接查询、嵌套查询、集合查询。
2,掌握用条件表达式表示检索结果。
3,掌握用聚合函数计算统计检索结果。实验7.1 单表查询
实验目的:1,掌握指定列或全部列查询。
2,掌握按条件查询。
3,掌握对查询结果排序。
4,掌握使用聚集函数的查询。
5,掌握分组统计查询。实验内容:1,指定或全部列查询。
2,按条件查询及模糊查询。
3,对查询结果排序。
4,使用聚集函数的查询。
5,分组统计查询。
实验7.2 连接查询 实验目的:掌握设计一个以上数据表的查询方法。多表之间的连接包括等值连接、自然连接、非等值连接、自身连接、自身连接、外连接和复合连接。
实验内容:1,连接查询,查询所有选课学生的学号、姓名、选课名称及成绩。
查询每门课程的课程号、任课教师姓名及其选课人数。
2,自身连接,查询所有比刘伟工资高的的教师的姓名、工资及刘伟的工资。
查询同时选修了程序设计和微机原理的学生的姓名、课程号。
3,外连接,查询所有学生的学号、姓名、选课名称及成绩(没有选课的学生的选课信息显示为空)
实验结果
实验7.3 嵌套查询
实验目的:掌握嵌套查询使我们可以用多个简单查询构成复杂的查询。从而增强了SQL的查询能力。
实验内容:1,返回一个值的子查询,查询与刘伟教师职称相同的教师号、姓名和职称。
2,返回一组值的子查询,使用ANY谓词查询讲授课程号为C5的教师姓名。使用IN谓词查询讲授课程号为C5的教师姓名。使用ALL谓词查询其他系中比计算机系所有教师工资都高的教师的姓名、工资、使用EXISTS谓词查询没有讲授课程号为C5的课程的教师姓名、所在系.使用NOT EXISTS谓词查询至少选修了学生S2选修的全部课程的学生的学号。实验结果
实验7.4 集合查询
实验目的:掌握使用UNION操作符将来自不同查询但结构相同的数据集合组合起来,形成一个具有综合信息的查询结果。
实验内容:查询年龄不大于19岁或者属于计算机系的学生,步骤如下:打开新建查询窗口,创建SQL语句。执行语句。
实验结果
实验十.T-SQL程序设计与游标设计
实验目的
掌握Transact-SQL语言及其程序设计的方法 掌握T-SQL游标的使用方法
实验10.1 T-SQL程序设计逻辑 实验目的
掌握T-SQL程序设计的控制结构及程序设计逻辑 实验内容
(1)计算1~100之间所有能被3整除的数的个数和总和。
(2)从学生表S中选取SNO,SN,SEX,如果为“男”则输出M,如果为“女”则输出F。实验 10.2 面向复杂T-SQL程序设计 实验目的
掌握面向复杂应用的T-SQL程序设计方法。实验内容
(1)从教学数据库jxsk中查询所有同学选课成绩情况:姓名,课程名,成绩。要求:凡成绩为空者输出“未考”;小于60分的输出“不及格”;60~70分的输出“及格”;70~80分的输出“中”;80~90分输出“良好”;90~100分输出优秀。并且输出记录按照下面要求排序:先按SNO升序,再按CNO升序,最后按成绩降序。
(2)现给教师增加工资。要求:必须任两门以上课程且涨幅按总收入分成三个级别:4000元以上涨300;3000元以上涨200;3000元以上涨100。只任一门课程的涨50.其他情况不涨。
实验 10.2 使用游标 实验目的
学习和理解关系数据中游标的概念和设计思想。掌握使用T-SQL游标处理结果集的方法。实验内容
针对数据库jiaoxuedb,进行下面的实验:
(1).定义一个游标Cursor_Famale。要求该游标返回所有女同学的基本信息,在游标中查找并显示牛莉的记录。(2).创建一个一个储存过程Pro_C,返回一个包含所有选修数据库课程的学生基本信息的游标。利用该存储过程,通过学生姓名查找学生王一山是否选修了数据库课程以及成绩。
第四篇:教学:数据库-存储过程资料
教学三:存储过程
一、教学目的
(1)掌握T-SQL流控制语句;(2)掌握创建存储过程的方法;(3)掌握存储过程的执行方法;(4)掌握存储过程的管理和维护。
二、教学内容
1、创建简单存储过程
(1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。
if exists(select name from sysobjects where name='stu_pr'and type='p')begin print '已删除!' drop procedure stu_pr end else print '不存在,可创建!' go create procedure stu_pr as select * from Student_20103322 left outer join SC_20103322
on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where classno='051' 1
exec stu_pr
2、创建带参数的存储过程
(1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。
if exists(select name from sysobjects where name='stu_proc1' and type='p')begin
print '已删除!' drop procedure stu_proc1 end else
print '不存在,可创建!' go create procedure stu_proc1 @Sdept char(8)='%',@Sname varchar(8)='林%' as select Sdept,Student_20103322.Sno,Sname,DATEDIFF(YEAR,Birth,GETDATE())age,Cname,Grade from Student_20103322,SC_20103322,Course_20103322 where Student_20103322.Sno=SC_20103322.Sno and Course_20103322.Cno=SC_20103322.Cno and Sdept like @Sdept and Sname like @Sname
execute stu_proc1 '计算机系','林红' 3
execute stu_proc1 '信息安全','胡光璟'
(2)创建一个名为Student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成绩。(学号起始号与终止号在调用时输入,可设默认值)。执行该存储过程。if exists(select name from sysobjects where name='Student_sc'and type='p')begin print '已删除!' drop procedure student_sc end else print '不存在,可创建!' go create procedure Student_sc @Sno1 char(8),@Sno2 char(8)as select Student_20103322.Sno,Sname,SUM(Grade)总成绩 from Student_20103322,SC_20103322,Course_20103322 where Student_20103322.Sno=SC_20103322.Sno and Course_20103322.Cno=SC_20103322.Cno and Student_20103322.Sno>=@Sno1 and Student_20103322.Sno<=@Sno2 group by Student_20103322.Sno,Sname
execute Student_sc '20110000','20110003' 5
3、创建带输出参数的存储过程
(1)创建一个名为Course_sum的存储过程,可查询某门课程考试的总成绩。总成绩可以输出,以便进一步调用。
if exists(select name from sysobjects where name='Course_sum'and type='p')begin print '已删除!' drop procedure Course_sum end else print '不存在,可创建!' go create procedure Course_sum @Cname varchar(20),@sum int output as select @sum=sum(Grade)from SC_20103322,Course_20103322 where Course_20103322.Cno=SC_20103322.Cno and Cname=@Cname
group by SC_20103322.Cno,Cname
declare @ping int exec Course_sum '高数',@ping output print '高数的考试总成绩为:'+cast(@ping as varchar(20))
(2)创建一执行该存储过程的批处理,要求当总成绩小于100时,显示信息为:“XX课程的总成绩为:XX,其总分未达100分”。超过100时,显示信息为:“XX课程的总成绩为:XX”。
declare @sum int
declare @Cname varchar(20)Exec Course_sum @cname,@sum out begin
if @sum <100 print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)+ ',其总分未达分'
else
print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)end
declare @sum int
declare @Cname varchar(20)set @Cname='高数' Exec Course_sum @cname,@sum out begin
if @sum <100 print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)+ ',其总分未达分'
else
print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)end
4、创建带重编译及加密选项的存储过程
创建一个名为update_sc、并带重编译及加密选项的存储过程,可更新指定学号、指定课程号的学生的课程成绩。(学号、课程号由调用时输入)
if exists(select name from sysobjects where name='update_sc'and type='p')begin print '已删除!' drop procedure update_sc end else print '不存在,可创建!' go create procedure update_sc
@sno char(8),@cno char(3),@grade tinyint with RECOMPILE , ENCRYPTION as update SC_20103322 set Grade=@grade
where Sno=@sno and Cno=@cno
declare @sno char(8),@cno char(3),@grade tinyint set @sno='20103322' set @cno='003' set @grade='100' exec update_sc @sno,@cno,@grade begin print cast(@sno as varchar)+'的'+cast(@cno as varchar)+'课程成绩为:'+cast(@grade as varchar)end
5、使用T-SQL语句管理和维护存储过程
(1)使用sp_helptext查看存储过程Student_sc的定义脚本
exec sp_helptext student_sc
(2)使用select语句查看Student_sc存储过程的定义脚本(提示:通过查询表sysobjects和表syscomments)
select *
from sysobjects,syscomments where name = 'Student_sc'
(3)将存储过程stu_pr改为查询学号为2011001的学生的详细资料。
alter procedure stu_pr as select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001'
(4)删除存储过程stu_pr。
drop procedure stu_pr
6、使用SQL Server Management Studio管理存储过程
(1)在SQL Server Management Studio中重新创建刚删除的存储过程stu_pr create procedure stu_pr as begin select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001' end
(2)查看存储过程stu_pr,并将该过程修改为查询051班女生的所有资料。
ALTER procedure [dbo].[stu_pr] as begin select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001' and Sex='女' end
(3)删除存储过程stu_pr
【完】
第五篇:SQL数据库实验报告 实验二
实验2SQL Server数据库的管理
1.实验目的(1)了解SQL Server 数据库的逻辑结构和物理结构的特点。
(2)掌握使用SQL Server管理平台对数据库进行管理的方法。
(3)掌握使用Transact-SQL语句对数据库进行管理的方法。
2.实验内容及步骤
(1)在SQL Server管理平台中创建数据库。
① 运行SQL Server管理平台,在管理平台的对象资源管理器中展开服务器。
② 右击“数据库”项,在快捷菜单中选择“新建数据库”菜单项。在新建数据库对话框的数据库名称文本框中输入学生管理数据库名studentsdb,单击“确定”按钮。
(2)选择studentsdb数据库,在其快捷菜单中选择“属性”菜单项,查看“常规”、“文件”、“文件组”、“选项”、“权限”和“扩展属性”等页面。
(3)打开studentsdb数据库的“属性”对话框,在“文件”选项卡中的数据库文件列表中修改studentsdb数据文件的“分配的空间”大小为2MB。指定“最大文件大小”为5MB。修改studentsdb数据库的日志文件的大小在每次填满时自动递增5%。
(4)单击“新建查询”打开查询设计器窗口,在查询设计器窗口中使用Transact-SQL语句CREATE DATABASE创建studb数据库。然后通过系统存储过程sp_helpdb查看系统中的数据库信息。
(5)在查询设计器中使用Transact-SQL语句ALTER DATABASE修改studb数据库的设置,指定数据文件大小为5MB,最大文件大小为20MB,自动递增大小为1MB。
(6)在查询设计器中为studb数据库增加一个日志文件,命名为studb_Log2,大小为5MB,最大文件大小为10MB。
(7)使用SQL Server管理平台将studb数据库的名称更改为student_db。
(8)使用Transact-SQL语句DROP DATABASE删除student_db数据库。
3.实验思考
(1)数据库中的日志文件是否属于某个文件组?
(2)数据库中的主数据文件一定属于主文件组吗?
(3)数据文件和日志文件可以在同一个文件组吗?为什么?
(4)删除了数据库,其数据文件和日志文件是否已经删除?是否任何人都可以删除数据库?
(5)能够删除系统数据库吗?