数据库原理及应用
实验报告
题 目:触发器与存储过程
专 业:计算机科学与技术
班 级: 1020542
学 号: 09
姓 名: 杨生涛
太原工业学院计算机工程系
20##年12月4日
一、实验目的与要求
使学生加深对触发器和存储过程的创建和使用。
二、实验内容
(1) 触发器的使用
a) 在数据表“学生”中创建update触发器,级联更新“选课”表中相应的记录信息
b) 利用delete表,将“学生”表中被删除的学生记录存储到“学生备份”表中,以供日后的数据查询和分析
(2) 存储过程的使用
a) 在student数据库中,建立一个存储过程,要求统计计算机系学生的人数,并将结果返回给用户
b) 在student数据库中,建立一个存储过程,要求
l 统计成绩大于等于90分学生的人数
l 统计成绩大于等于80并且小于90分学生的人数,并将结果返回给用户
三、解决方案
1) 触发器的使用
a) 在数据表“学生”中创建update触发器,级联更新“选课”表种相应的记录信息。
create trigger st_update
on student for update as
declare @bsno char(9),@asno char(9)
print '使用update触发器级联更新sc表中相关的行-开始'
select @bsno=sno from deleted
print '更新前的学号:'+@bsno
select @asno=sno from inserted
print '更新后的学号:'+@asno
update sc set sno=@asno where sc.sno=@bsno
print '使用update触发器级联更新sc表中相关的行-结束'
update student set sno='102055222' where sno = '102055223'
b) 利用Delete表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和分析。
use student
go
if exists (select * from dbo.Student where sno =
object_id(N'[dbo].[sc_back]') and OBJECTPROPERTY(sno, N'IsUserTable') = 1)
drop table [dbo].[sc_back]
GO
CREATE TABLE [dbo].[sc_back] (
[sno] [char] (9) NOT NULL ,
[cno] [char] (3) NOT NULL ,
[grade] [int] NULL
) ON [PRIMARY]
if exists(select name from sysobjects where name='sc_delete' and type='tr')
drop trigger sc_delete1
go
create trigger sc_delete
on sc for delete as
print '使用delete触发器备份删除sc表中相关的行--开始'
insert into sc_back
select * from deleted
print '使用delete触发器备份删除sc表中相关的行--结束'
2) 存储过程
a) 在student数据库中,建立一个存储过程,要求统计计算机系学生的人数,并将人数返回给用户。
use student
GO
CREATE PROCEDURE PROC_ST03 @sdept varchar(10),@num smallint output
AS
select @num= count(*) from student where sdept=@sdept
GO
use student
go
declare @sd varchar(10),@n smallint
set @sd='05'
exec PROC_ST03 @sd,@n output
print convert(varchar(6),@n)
go
b) 在Student数据库中,建立一个存储过程要求统计成绩大于等于90分学生人数;统计成绩大于等于80并且小于90分学生的人数,并将人数返回给用户。
use student
GO
CREATE PROCEDURE PROC_ST05 @n1 smallint output,@n2 smallint output
AS
select @n1= count(*) from sc where grade>=90
select @n2= count(*) from sc where grade>=80 and grade<90
use student
GO
declare @n1 smallint,@n2 smallint
exec PROC_ST05 @n1 output, @n2 output
print convert(varchar(6),@n1)
print convert(varchar(6),@n2)
go
四、实验结果
1) 触发器的应用
2) 存储过程
五、出现的问题及解决的方法
无
第二篇:数据库原理实验报告
实 验 一
实验项目名称: SQL Server 2000系统的配置及基本操作
实验主要内容及方法 熟悉实验环境实验主要内容及方法 熟悉实验环境
实验要求:
1、了解SQL Server 2000的启动,熟悉如何在SQL Server 2000图形环境下建立数据库和表。
2、了解SQL Server 2000系统的相关服务及常用工具。
实验设备:装有SQL SERVER 2000的电脑
实验步骤:
1、启动和停止SQL Server
a.用服务管理器启动和停止SQL Server
选择菜单“程序|Microsoft SQL Server|服务管理器”。
b.自动启动SQL Server
使用手动启动弹出“SQL Server服务管理器”后,选择复选框“当启动OS时自动启动服务”后,下次开机时系统即可自动启动SQL Server。
c.用操作系统控制面板中的服务管理程序启动和停止SQL Server
(1) 择菜单“程序|管理工具|服务”,弹出“服务”对话框。
(2) 鼠标右击要启动的服务器名称,即:MSSQLSERVER,弹出菜单后,选择“启动”菜单项,就可启动SQL Server;类似的方法,可以停止SQL Server。
2、使用企业管理器
a.启动企业管理器
选择菜单“程序|Microsoft SQL Server|服务管理器”。
b.启动和停止SQL Server
在企业管理器中所要启动的服务器上点鼠标右击,从快捷菜单中选择“连接”,即可启动并连接;类似的方法,可以停止SQL Server。
c.浏览master 和pubs数据库的结构
3、使用查询分析器
a.启动查询分析器
选择“程序|Microsoft SQL Server|查询分析器”菜单后,弹出“连接到SQL Server服务器”对话框。
用户输入SQL Server服务器的名称和身份验证后,即可进入查询分析器。注:身份验证可以使用“Windows身份验证”或“SQL Server身份验证”。
b. 从表中查询数据:
首先选择当前使用的数据库为pubs,然后在查询分析器的查询窗口中输入SQL语句
Select * from titles
点击按钮,执行该SQL语句,观察执行结果。
执行结果:(服务器: 消息 208,级别 16,状态 1,行 1;对象名 'pubs' 无效。)
c.练习T-SQL中的函数
如求200的平方根
在查询分析器的查询窗口中输入
select sqrt(200)
go
观察执行结果。
执行结果:(14.142135623730951)
实验总结:
1、了解SQL Server 2000的启动。
2、了解SQL Server 2000系统的相关服务及常用工具。
实 验 二
实验项目名称 sql数据定义语言的应用
实验主要内容及方法 数据库、数据表、视图、索引的定义、删除及修改
实验要求:
1、解并掌握SQL查询分析器及企业管理器的使用。
2、握数据库、基本表、索引的定义、删除与修改。
实验目的:熟练掌握库、表的定义、删除与修改,为后继学习作准备。
实验设备:装有SQL SERVER 2000的电脑
实验步骤:
对于如下给定的数据表格进行实验表中数据可以自行给定。
一、定义数据库
1.用企业管理器创建数据库
创建一个名称为Test的数据库,数据文件的初始大小设为5MB,文件增长增量设为2MB,文件增长方式设为自动增长,文件的增长上限设为50MB;日志文件的初始大小为10MB,文件增长增量为1MB,文件的增长限制设为100MB。
具体创建步骤如下:
1)进入SQL Server企业管理器
2)展开目录树,在“数据库”选项上单击右键,选择“新建数据库”。
该窗口有3个选项卡:常规、数据文件和事务日志。输入数据库名称:Test,点击数据文件选项卡,在数据文件中,你可以设定数据文件的名称,所在目录以及文件的大小等信息。完成后点击事务日志选项卡, 事务日志中,你可以设定日志文件的名称,所在目录以及文件的大小等信息。接受系统的缺省值,点击确定按钮,完成数据库的新建。
2.用T-SQL语言创建数据库
CREATE DATABASEdatabase_name
其他配置可以采用默认设置。
[练习]:按以上要求,在查询分析器中用T-SQL语言创建数据库“Test”,写出SQL语句。
Create database test
执行结果:
CREATE DATABASE 进程正在磁盘 'test' 上分配 0.75 MB 的空间。
CREATE DATABASE 进程正在磁盘 'test_log' 上分配 0.49 MB 的空间。
3.查看并修改数据库的属性
(1)进入企业管理器,鼠标右键单击数据库“Test”,选择“属性”,查看选项。
将数据库Test数据文件的初始大小改为20MB,最大值改为80MB,数据增长改为5%。
二、定义基本表
例1 建立表1.1所示的学生表Students,每个属性名的意义为Sno-学号、Sname-姓名、Ssex-性别、Sage-年龄、Sdept-所在系。这里要求Sno和Sname不能为空值,且取值唯一。
CREATE TABLE Students /*列级完整性约束条件*/
(Sno CHAR(5) NOT NULL, /* Sno不能为空值*/
Sname CHAR(20) NOT NULL, /*Sname不能为空值*/
Ssex CHAR(2),
Sage INT,
Sdept CHAR(15),
CONSTRAINT un_Sno UNIQUE(Sno), /* Sno取值唯一的约束*/
CONSTRAINT un_Sname UNIQUE(Sname)); /* Sname取值唯一的约束*/
在查询分析器中输入以上代码,点击执行按扭,即可得到空表Students.
说明:在Microsoft SQL Server 2000的查询分析器(Query Analyzer)中使用单条SQL语句,其末尾不需要分号“;”作为命令结尾标记。通常,SQL Server 2000对大多数末尾带有分号的SQL命令都能顺利执行,但对少数的SQL命令,末尾若带分号,则SQL Server 2000会给出错误信息提示。
例2 建立表1.2所示的课程表Courses,其属性名意义分别为Cno-课程号, Cname-课程名, Pre_Cno-先修课程号, Credits-学分。
CREATE TABLE Courses
(Cno CHAR(5) NOT NULL, /* Cno不能为空值*/
Cname CHAR(20) NOT NULL, /*Cname不能为空值*/
Pre_Cno CHAR(5),
Credits INT,
CONSTRAINT un_Cno UNIQUE(Cno)); /*Cno取值唯一的约束*/
例3 建立表1.3所示的成绩表Sc。其中的属性名意义分别为Sno-学号,Cno-课程号和Grade-考试成绩。
CREATE TABLE Sc
( Sno CHAR(5) NOT NULL, /* Sno不能为空值*/
Cno CHAR(5) NOT NULL, /* Cno不能为空值*/
Grade INT,
CONSTRAINT Sno_Cno UNIQUE(Sno,Cno)); /*Sno+Cno取值唯一的约束*/
三、 修改基本表
例4 向基本表Students中增加“入学时间”属性列,其属性名为Sentrancedate,数据类型为DATETIME型。
ALTER TABLE Students ADD Sentrancedate DATETIME
例5 将Sage(年龄)的数据类型改为SMALLINT型。
ALTER TABLE Students ALTER COLUMN Sage SMALLINT
例6 删除Sname(姓名)必须取唯一值的约束。
ALTER TABLE Students DROP CONSTRAINT un_Sname
A注意:SQL Server 20## 增加了删除属性的命令。比如,删除属性列Sentrancedate的命令为:
LTER TABLE Students DROP COLUMN Sentrancedate;
说明:⑴ 为了保证后面例子能够顺利运行,请大家一定将属性列Sentrancedate从Students表中删除。
⑵ 为了调试SQL语句方便,这里没有在表Sc中增加参照完整性约束,甚至没有定义主键。
四、 删除基本表
例7 删除Students表。
DROP TABLE Students;
说明:此表删除后,请立即用例1将其建立起来,以便后面的例子使用。
五、 建立索引
例8 为学生选课数据库中的Students,Courses,Sc三个表建立索引。其中Students表按Sno(学号)升序建唯一索引,Courses表按Cno(课程号)升序建唯一索引,Sc表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。其语句为:
CREATE UNIQUE INDEX Stu_Sno ON Students(Sno);
CREATE UNIQUE INDEX Cou_Cno ON Courses(Cno);
CREATE UNIQUE INDEX Rep_Scno ON Sc(Sno ASC, Cno DESC);
例9 在基本表Students的Sname(姓名)和Sno(学号)列上建立一个聚簇索引,而且Students中的物理记录将按照Sname值和Sno值的升序存放。其语句为:
CREATE CLUSTERED INDEX Stu_Sname_Sno ON Students(Sname, Sno);
六、删除索引
例10 删除基本表Sc上的Rep_SCno索引。
DROP INDEX Sc.Rep_Scno;
七、建立视图
例11 建立数学系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。
CREATE VIEW C_Student
AS
SELECT Sno, Sname, Sage, Sdept
FROM Students
WHERE Sdept=’数学’
WITH CHECK OPTION
例12 建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)的视图。
本视图由三个基本表的连接操作导出,其SQL语句如下:
CREATE VIEW Student_CR
AS
SELECT Students.Sno, Sname, Cname, Grade
FROM Students, Sc, Courses
WHERE Students.Sno= Sc.Sno AND Sc.Cno=Courses.Cno
例13 定义一个反映学生出生年份的视图。
CREATE VIEW Student_birth(Sno, Sname, Sbirth)
AS SELECT Sno, Sname, 1996-Sage
FROM Students
八、删除视图
例14 删除视图Student_CR。
DROP VIEW Student_CR;
实 验 三
实验项目名称 sql 数据操纵语言的应用(6课时,综合)
实验主要内容及方法 数据的各种操纵方法
实验要求:
(1) 掌握sql数据插入、修改、删除和查询语句的一般格式。
(2) 掌握sql数据插入、修改、删除和查询使用方法。
实验目的:熟练掌握四大语句的使用。
实验设备:装有SQL SERVER 2000的电脑
实验步骤:
一、插入数据
1)采用insert语句将实验二给定的表格中数据插入数据库。
表一:
INSERT INTO Students VALUES('S01','王平','男','21','信息')
INSERT INTO Students VALUES('S02','刘华','女','19','信息')
INSERT INTO Students VALUES('S03','范君','女','18','计算机')
INSERT INTO Students VALUES('S04','李伟','男','19','计算机')
INSERT INTO Students VALUES('S05','黄河','男','18','数学')
INSERT INTO Students VALUES('S06','长江','男','20','数学')
INSERT INTO Students VALUES('S07','文涛','男','17','信息')
INSERT INTO Students VALUES('S08','杨丽','女','18','历史')
INSERT INTO Students VALUES('S09','欧浩','男','21','中文')
INSERT INTO Students VALUES('S10','刘洪','男','19','历史')
表二:
insert into Courses(Cno,Cname,Credits)
VALUES ('C01','英语',4)
insert into Courses VALUES('C02','数据结构','C05',2)
insert into Courses VALUES('C03','数据库','C02',2)
insert into Courses VALUES('C04','DB_设计','C03',3)
insert into Courses (Cno,Cname,Credits)VALUES('C05','C++',3)
insert into Courses VALUES('C06','网络原理','C07',3)
insert into Courses VALUES('C07','操作系统','C05',3)
表三:
INSERT INTO Sc VALUES('S01','C01',92)
INSERT INTO Sc VALUES('S01','C03',84)
INSERT INTO Sc VALUES('S02','C01',90)
INSERT INTO Sc VALUES('S02','C02',94)
INSERT INTO Sc VALUES('S02','C03',82)
INSERT INTO Sc VALUES('S03','C01',72)
INSERT INTO Sc VALUES('S03','C02',90)
INSERT INTO Sc VALUES('S04','C03',75)
(2) 在数据库中定义一个关系History_Student,其关系模式与Students完全一样,试将关系Students中的所有元组插入到关系History_Student中去。
建立History_Student表
create table History_Student
(Sno CHAR(5) NOT NULL, /* Sno不能为空值*/
Sname CHAR(20) NOT NULL, /*Sname不能为空值*/
Ssex CHAR(2),
Sage INT,
Sdept CHAR(15),);
查询Students,并将查询结果插入History_Student表。
insert
into History_Student(Sno,Sname,Ssex,Sage,Sdept)
select Sno,Sname,Ssex,Sage,Sdept
from Students
二、修改数据
1)将学号为“S03”的学生年龄改为22岁,即要修改满足条件的一个元组的属性值。
update Students
set Sage=22
where Sno='S03'
2)将所有学生的年龄增加1岁。即要修改多个元组的值。
update Students
set Sage=Sage+1
3)将数学系所有学生的成绩置零。
注意:由于学生所在系的信息在Students表中,而学习成绩在Sc表中,因此,可以将SELECT子查询作为WHERE子句的条件表达式。
update Sc
set grade=0
where '数学'=
(select Sdept
from Students
where Students.Sno=Sc.Sno)
三、删除数据
1)删除学号为“S04”的学生选修的课号为“C02”的记录。
delete
from sc
where sno='s04' and cno='c02'
2)删除所有学生的选课记录。
delete
from sc
3)删除数学系所有学生的选课记录。
delete
from sc
where '数学'=
(select sdept
from students
where students.sno=sc.sno)
四、 查询数据
1、无条件查询
1) 查询全体学生的详细记录
select *
from students
2)查询全体学生的姓名(Sname)、学号(Sno)、所在系(Sdept)。
select sname,sno,sdept
from students
3)查询全体学生的姓名(Sname)、出生年份及学号(Sno)。
提示:由于SELECT子句的<目标列表达式>不仅可以是表中的属性列,也可以是表达式,故可以查询经过计算的值。
select sname,20##-sage
from students
4)查询全体学生的姓名、出生年份和学号,要求用小写字母表示学号中的字母。
select sname,20##-sage, lower(sno)
from students
2、条件查询
1)查询数学系全体学生的学号(Sno)和姓名 (Sname)。
select sno,sname
from students
where sdept='数学'
2)查询所有年龄在18-22岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。
select sname,sage
from students
where 18<=sage and sage<=22
3)查询年龄不在18-22岁之间的学生姓名(Sname)及年龄(Sage)。
select sname,sage
from students
where sage not between 18 and 22
4)查询自动化系、数学和计算机系学生的学号(Sno)、姓名(Sname)和性别(Ssex)。
select sno,sname,ssex
from students
where sdept in('自动化系','数学','计算机')
5)查询既不是信息系、数学系、也不是计算机系的学生的姓名(Sname)和性别(Ssex)。
select sname,ssex
from students
where sdept not in('信息','数学','计算机')
6)查询所有姓刘的学生的姓名(Sname)、学号(Sno)和性别(Ssex)。
select sname,sno,ssex
from students
where sname like'刘%'
7)查询课程名为“DB_设计”的课程号(Cno)和学分(Credits)。
select cno,credits
from courses
where cname='DB_设计'
8)假设某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。试查询缺少成绩的学生的学号(Sno)和相应的课程号(Cno)。
select sno cno
from sc
where grade is null
9)查询所有有成绩的学生学号(Sno)和课程号(Cno)。
select sno,cno
from sc
where grade is not null
3、查询结果排序
1)查询选修了C03号课程的学生的学号(Sno)和成绩(Grade),并按成绩降序排列。
select sno,grade
from sc
where cno='c03'
order by grade desc
2)查询全体学生情况,查询结果按所在系的系名(Sdpet)升序排列,同一系中的学生按年龄(Sage)降序排列。
select *
from students
order by sdept, sage desc
4、集函数的使用
1)查询学生总人数。
select count(*)
from students
2)查询选修了课程的学生人数。
select count(distinct sno)
from sc
3)计算选修C01号课程的学生平均成绩。
select avg(grade)
from sc
where cno='c01'
4)查询选修C01号课程的学生最高分数。
select max(grade)
from sc
where cno='c01'
5、查询结果分组
1)求各个课程号(Cno)及相应的选课人数。
SELECT Cno , COUNT(Sno)
FROM Sc
GROUP BY Cno;
2)查询选修了3门或3门以上课程的学生学号(Sno)。
select sno
from sc
group by sno
having count(*)>=3
6、不同表之间的连接查询
1)查询每个学生及其选修课程的情况。
提示:本查询实际上是涉及Students与Sc两个表的连接操作。这两个表之间的联系是通过公共属性Sno实现的。
select students.*,sc.*
from students,sc
where students.sno=sc.sno
2)查询每个学生的学号(Sno)、姓名(Sname)、选修的课程名(Cname)及成绩(Grade)。
select students.sno,sname,cname,grade
from students,sc,courses
where students.sno=sc.sno and sc.cno=courses.cno
7、自身连接
1)查询每一门课的间接先修课(即先修课的先修课)。
在Courses表关系中,只有每门课的直接先修课信息,而没有先修课的先修课。要得到这个信息,必须先对一门课找到其先修课,再按此先修课的课程号,查找它的先修课程。这就需要要将Courses表与其自身连接。为方便连接运算,这里为Courses表取两个别名分别为A,B。
SELECT A.cno,A.cname,B.Pre_Cno
FROM Courses A, Courses B
WHERE A.Pre_Cno =B.Cno;
8、带谓词IN的嵌套查询
1)查询选修了编号为“C02”的课程的学生姓名(Sname)和所在系(Sdept)。
select sname,sdept
from students
where sno in
(select sno
from sc
where cno='c02')
2)查询与“李伟”在同一个系学习的学生学号(Sno)、姓名(Sname)和系名(Sdept)。
select sno,sname,sdept
from students
where sdept in
(select sdept
from students
where sname='李伟')
3)查询选修了课程名为“数据结构”的学生学号(Sno)和姓名(Sname)。
select sno, sname
from students
where sno in
(select sno
from sc
where cno in
(select cno
from courses
where cname='数据结构'))
9、带有比较运算符的嵌套查询
1)将查询与“李伟”在同一个系学习的学生学号(Sno)、姓名(Sname)和系名(Sdept)。
改为带有比较运算符的嵌套查询。
提示:由于一个学生只可能在一个系学习,因此子查询的结果是一个值,因此可以用=代替IN。
select sno,sname,sdept
from students
where sdept=
(select sdept
from students
where sname='李伟')
10、 带谓词ANY或ALL的嵌套查询
1)查询非自动化系的不超过自动化系所有学生的年龄的学生姓名和年龄。
select sname,sage
from students
where sage<all
(select sage
from students
where sdept='自动化')
and sdept!='自动化'
11、带谓词EXISTS的嵌套查询
1)查询所有选修了编号为“C01”课程的学生姓名(Sname)和所在系(Sdept)。
select sname,sdept
from students
where exists
(select *
from sc
where sno=students.sno and cno='c01')
2)查询与“李伟”在同一个系学习的学生学号(Sno)、姓名(Sname)和系名(Sdept)。
SELECT Sno, Sname, Sdept
FROM Students A
WHERE EXISTS
(SELECT *
FROM Students B
WHERE B.Sdept=A.Sdept AND B.Sname='李伟');
3)查询选修了所有课程的学生姓名(Sname)和所在系。
select sname,sdept
from students
where not exists
(select *
from courses
where not exists
(select *
from sc
where sno=students.sno
and cno=courses.cno))
实 验 四
实验项目名称 sql的数据控制语言及数据库的保护 (2课时,验证)
实验主要内容及方法 数据控制语言,与用户、权限管理
实验要求:
(1) 掌握用户的创建,删除,权限的授予、收回。
(2)掌握数据库的备份和还原。
实验目的:熟练掌握授权与撤权。
实验设备:装有SQL SERVER 2000的电脑
实验步骤:
一、用户管理
1.用企业管理器管理SQL Server登录
A. 增加一个Windows NT用户或用户组
1.选择Windows NT用户或用户组
2.设置登录用户的服务器角色为系统管理员
3.设置登录用户可访问的数据库为DBS。一个登录用户可以访问很多个数据库,可以在这里指定,指定后在相应的数据库中建立了相应的数据库用户。
4.按下“确定”,即可建立一个Windows NT用户,然后,可以在企业管理器中检验登录用户是否已经建立。
B. 增加一个SQL Server用户
1.增加一个SQL Server用户,用户名为“lwh”,密码为“lwhpass”。
打开Windows NT/安全性,右击登陆选择新建登陆,输入登陆名,选择SQL Sever身份验证,并输入密码
2.设置登录用户的常规属性
C. 修改用户
如:修改SQL Server用户lwh的属性。
右键点击登陆中的lwh,选择属性,即可修改
D. 删除用户
右键点击登陆中的lwh,选择删除
2、用查询分析器管理SQL Server登录
A. 增加一个Windows NT用户或用户组
如:增加一个Windows NT用户为“B029\sjxy”,授予登录访问权。
exec sp_grantlogin 'B029\sjxy'
B. 增加一个SQL Server用户
如:增加一个SQL Server用户,用户名为“lwh”,密码为“lwhpass”。
exec sp_addlogin 'lwh','lwhpass'
C. 删除用户
如:删除Windows NT用户“B029\sjxy”。
exec sp_revokelogin 'B029\sjxy'
如:删除SQL Server用户lwh。
3.用企业管理器管理数据库用户
A.增加一个数据库用户
打开数据库,右键点击“用户”,选择数据库用户。
B. 删除一个数据库用户
右键点击所选择的用户,再选择删除即可。
4、用查询分析器管理数据库用户
A. 增加一个数据库用户
在master中增加用户BUILTIN\Administrators
use master
go
exec sp_grantdbaccess 'BUILTIN\Administrators', 'BUILTIN\Administrators'
B. 删除一个数据库用户
将用户BUILTIN\Administrators从master 中删除。
use master
go
exec sp_revokedbaccess 'BUILTIN\Administrators'
二、权限管理
1.用企业管理器管理权限
在SQL Server中通过两种途径可实现对语句权限和对象权限的管理,从而实现对用户权限的设定。这两种途径分别为面向单一用户和面向数据库对象两种权限设置。
A. 面向单一用户的权限设置
为某一用户设置其对当前数据库所有对象的访问权限。如:设置数据库dbs的dbo用户的权限。
右键点击所选择的用户,再选择属性,在常规中的登陆名后点击权限即可设置。
B. 面向数据库对象的权限设置
为某一数据库对象设置当前数据库所有用户对其的访问权限。如:设置数据库dbs中数据表Course的权限。
右击表course,选择“所有任务”“管理权限”即可设置。
2、用查询分析器管理权限
利用企业管理器建立U1,U2,U3,U4,U5用户,启动查询分析器,用GRANT语句
对数据库存取权限进行授权操作。
(1) 利用查询分析器对这些用户进行授权.并加以验证
a. 把查询Student表的权限授给用户U1。
GRANT SELECT
ON Students
TO U1
b.把对表和Course表的全部操作权限授予用户U2和U3
GRANT All PRIVILEGES
ON Courses
TO U2, U3
c.把对表Sc的查询权限授予所有用户。
GRANT SELECT
ON SC
TO PUBLIC;
d.把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT
ON Students
TO U4;
e.把对表SC的INSERT权限授予U5用户,并允许将此权限再授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
(2)利用查询分析器对这些用户进行收权.并加以验证.
a.把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON Students
FROM U4;
b.收回所有用户对表sc的查询权限
REVOKE SELECT
ON SC
FROM PUBLIC;
c.把用户U5对SC表的INSERT 权限收回
REVOKE INSERT
ON SC
FROM U5
CASCADE
三、数据库备份
1.用企业管理器进行备份
在SQL Server中无论是数据库备份,还是事务日志备份、差异备份、文件或文件组备份都执行相同的步骤。
选择要备份的数据库右击看有任务/备份数据库,再依次选择备份方式,备份目的及重写方式。
四.数据库还原
1. 用企业管理器进行恢复
选择要还原的数据库右击看有任务/还原数据库,
指定还原的数据库名称、还原的数据库文件(以前的备份数据库文件)、还原方式(以前的备份方式)等。