2024年1月10日发(作者:)
基于SQL SERVER的数据库技术
实验指导
计算机科学系软件教研室
实验一 数据库和表的管理
实验目的
掌握SQL SERVER常用组件的使用
学会数据库的建立和使用
学会表的建立和使用
实验内容
1.SQL SERVER常用组件的使用
2.使用企业管理器和T-SQL语句来建立数据库
3.使用企业管理器和T-SQL语句建立表
实验步骤
1、实例一
本实例讲解企业管理器的使用
(1)在“开始”|“程序”|“Microsoft SQL Server”中选择“企业管理器”,打开企业管理器。界面如图所示。
- 1 -
图1.1 企业管理器主界面
(2)双击“控制台根目录”下的“Microsoft SQL Servers”,出现“SQL Server组”,在组中选择相应的SQL Server注册服务器。如下图所示。
图1.2 SQL SERVER服务器注册
(3)双击“数据库”可以打开本服务器中的相应数据库,之后可以对数据库进行建立、更改、- 2 -
删除和对数据库中的表进行建立、更改和删除操作。结果如下图所示。
图1.3 建立数据库
(4)在企业管理器中可以对服务器的属性进行相应的设置。右键单击服务器“SYSSYS(WindowNT)”选择属性,出现下图所示属性对话框。通过该对话框,可以对服务器和数据库进行适当的设置。
- 3 -
图1.4 SQL SERVER属性窗口
(5)企业管理器也可以设置数据库的属性,右键单击某一数据库,选择“属性”,则会出现数据库属性对话框。设置该对话框可以设置数据库的属性。
- 4 -
图1.5 数据库属性窗口
2、实例二
本实例讲解查询分析器的使用
(1)在“开始”|“程序”|“Microsoft SQL Server”中选择“查询分析器”,打开查询分析器。界面如图所示。
- 5 -
图1.6 SQL 查询分析器窗口
(2)如果用户已经设置了密码,则会出现“连接SQL Server”对话框,输入相应的用户名和密码即可进入查询分析器窗口。对话框窗口如下图所示。
图1.7 新建查询窗口
(3)进入查询分析器窗口后,即可使用查询分析器的各项功能,如使用T-SQL语言查询数据库中的相关信息等。例如,在查询窗口中输入以下内容。
USE pubs
- 6 -
Select type,pub_id,price
From titles
Where type= 'business'
Order by type,pub_id,price
Compute sum(price) By type,pub_id
Compute sum(price) By type
按“F5”或查询分析器窗口中的来执行查询语句,结果如下图所示。
图1.8 查询分析器的使用
(3)选择“查询”菜单下的“显示执行计划”和“显示客户统计”选项。接着按“F5”执行查询。此时在文本编辑器的下半部分的4个标签页上分别显示查询的结果网格、执行计划、统计及其相关信息。
- 7 -
图1.9 查询分析器执行计划显示窗口
图1.10 查询分析器统计显示窗口
图1.11 查询分析器消息显示窗口
3、实例三
本实例讲解服务管理器的使用
(1)企业管理器和查询分析器在使用前必须保证已经启用服务管理器,服务管理器是主要服务的提供者。它可以提供三种服务:SQL Server服务、MDTC服务和SQL Server服务。服务管理器启动会在通知栏上显示出来,如下图。
图1.12 SQL SERVER服务管理器的启动
(2)打开服务管理器需要在“开始”|“程序”|“Microsoft SQL Server”中选择“服务管理器”,出现服务管理器窗口,如下图所示。
- 8 -
图1.13 SQL SERVER服务管理器的使用
接下来可以设置服务管理器的启动、暂停和停止服务,也可以选择相应的服务器,和相应服务器提供的服务。
(3)在企业管理器的SQL Server组中单击右键后从快捷菜单中选择“连接”|“断开”选项,即可启动和断开服务器。
(4)配置服务器的属性对于管理SQL Server来说很重要,可以使用企业管理器进行配置。在企业管理器中在要进行配置的服务器上右击后,从快捷菜单中选择“属性”选项,即可对服务器属性进行设置,此设置对话框在前面已经讲过,这里不再赘述。
4、实例四
本实例主要讲解使用企业管理器创建一个数据库。
①要求数据库名为MYDB,数据库中包含一个数据文件,逻辑文件名为MY_DB_DATA,操作系统文件名为MY_DB_,文件的初始容量为5MB,最大容量为15MB,文件容量递增值为2MB。
②事务日志文件的逻辑文件名为MY_DB_LOG,操作系统文件名为MY_DB_,文件的初始容量为3MB,最大容量为10MB,文件容量递增为1MB。
③创建完成后要对其进行修改,添加一个数据文件,逻辑文件名为MY_DB_DATA1,操作系统文件名为MY_DB_,文件的初始容量为3MB,最大容量为15MB,文件容量递增值为2MB。
④将事务日志文件的最大容量改为 20MB,文件容量递增值改为2MB。
⑤将创建的数据库删除。
具体实现如下:
(1)打开企业管理器并展开服务器,右击其中的“数据库”节点,在弹出的快捷菜单中执行“新建数据库”命令,弹出如图所示对话框。
- 9 -
图1.14 使用企业管理器建立数据库
(2)选择“常规”选项卡,在“名称”文本框中键入数据库名称为“MYDB”。
(3)选择“数据文件”选项卡,在“文件名”列输入MY_DB_DATA,在“位置”列将文件名改为MY_DB_,在“初始大小”列输入5。
(4)选中“文件属性”复选框,在“文件增长”框中选中“按兆字节”单选框,并将其值改为2。
(5)在“最大文件大小”框中选中“将文件增长限制为”单选框,并将其改为15,如图所示。
- 10 -
图1.15 更改逻辑文件名和物理文件名
(6)选择“事务日志”选项卡,在“文件名”列输入MY_DB_LOG,在“位置”列将文件名改为MY_DB_,在“初始大小”列输入3。
(7)选中“文件属性”中的“文件自动增长”复选框,在“文件增长”框中选中“按兆字节”单选框,并将其值改为1。
(8)在“最大文件大小”栏中选中“将文件增长限制为”单选框,并将其改为10,如图所示。
- 11 -
图1.16 设置文件属性
用企业管理器完成修改数据库
(1)在企业管理器中选择“数据库”节点,右击刚刚创建的MYDB数据库,在弹出的快捷菜单中选择“属性”命令;
(2)选择“数据文件”选项卡,在“数据库文件”网格中的第二行添加数据文件,在其中的“文件名”列输入MY_DB_DATA1,在“位置”列将文件名改为MY_DB_,在“分配的空间”列添入3,表示新添加的文件的初始大小为3MB。
(3)选中“文件属性”中的“文件自动增长”复选框,在“文件增长”框中选择“按兆字节”单选框,并将其值改为2。
(3)在“最大文件大小”栏中选中“将文件增长限制为”单选钮,并将其值改为2,在“最大文件大小”栏中选中“将文件增长限制为”单选框,将其值改为20。如图所示。
- 12 -
图1.17 修改数据库
用企业管理器删除上面创建的数据库
(1)在企业管理器中选择“数据库”节点,右击创建的MYDB数据库,在弹出的快捷菜单中选择“删除”命令,弹出“删除数据库”对话框。
图1.18 删除数据库对话框
(2)单击“是”按钮,即可删除该数据库。
5、实例五
本实例讲解使用T-SQL语句完成创建数据库的操作,数据库的要求同上。
(1)打开查询分析器,输入如下语句:
CREATE DATABASE MYDB
ON
(NAME='MY_DB_DATA',
FILENAME='D:PROGRAM FILESMicrosft SQL ServerMSSQLdataMY_DB_',
- 13 -
SIZE=5,MAXSIZE=15,FILEGROWTH=2)
LOG ON
(NAME='MY_DB_LOG',
FILENAME='D:PROGRAM FILESMicrosft SQL ServerMSSQLdataMY_DB_',
SIZE=3,MAXSIZE=10,FILEGROWTH=1
)
GO
(2)按“F5”来执行,创建MYDB数据库。
(3)用T-SQL语句完成修改数据库的操作,语句如下。
ALTER DATABASE MYDB
ADD FILE
(NAME='MY_DB_DATA1',
FILENAME='C:Program FilesMicrosoft SQL ServerMSSQLdataMY_DB_',
SIZE=3,MAXSIZE=15,FILEGROWTH=2
)
GO
ALTER DATABASE MYDB
MODIFY FILE
(NAME='MY_DB_LOG',
MAXSIZE=20,FILEGROWTH=2
)
GO
6、实例六
本实例讲解使用企业管理器操纵表。
按下列要求创建、修改和删除用户表:
(1)创建一个包含如下各字段的员工信息表employees
创建的表如A.1所示。
字段名
empid
name
department
age
memo
数据类型
Char(10)
Char(20)
Tinyint
Tinyint
Varchar(60)
表1.1 员工信息表 employees
注释
员工代号,主键,非空
员工姓名,非空
员工所在部门代号,非空
员工年龄
备注
- 14 -
(2)创建一个包含如下各字段的部门信息表departments
创建的表如表A.2所示
字段名
depid
depname
memo
数据类型
tinyint
Char(10)
Varchar(60)
注释
部门代号,主键,非空
部门名称,非空
备注
表1.2 部门信息表departments
(3)创建一个包含如下字段的表tmp
字段名
id
数据类型
uniqueidentifier
表1.3 表tmp
(4)对上面的表作如下修改
①为employees表添加一个日期型的出生日期字段,添加一个浮点型的工资字段,删除年龄字段。
②将departments表的depid字段设为主键。
③将employees表中的depname字段名改为department,数据类型为tint int型,并设为外键,与departments表中的主键关联,名为FK_emp_dep。
④将departments表中的depname字段长度改为20。
⑤将employees表中的salary字段的值限定在0至10000之间。
(5)删除表tmp
具体实现如下:
(1)用企业管理器完成创建表的操作
具体步骤如下:
①打开企业管理器并展开服务器,单击其中的“数据库”节点,展开其中的一个数据库,并选择其下一级节点“表”。
②右击“表”,在弹出的快捷菜单中执行“新建表”命令,打开表设计窗口,在窗口中按照employees表的要求输入字段名及类型,并将“empid”设为主键。
③单击“保存”按钮,在弹出的“选择名称”对话框中输入表名employess,单击“确定”按钮关闭窗口,完成了employees表的创建。
④重复步骤1至3,但省去创建主键的步骤,建立departments表和tmp表。
注释
- 15 -
图1.19 建立表结构窗口
(2)用企业管理器完成修改表的操作
具体步骤如下:
①打开企业管理器并展开服务器,单击其中的“数据库”节点,展开其中的一个数据库,并单击其下一级节点“表”。
②在企业管理器右侧窗格中选择employees表,右击后,在弹出的快捷菜单中选择“设计表”命令,打开表设计窗口,添加一个日期型的出生日期字段及一个浮点型的工作字段,删除原有的年龄字段,并将department的数据类型改为tiny int型,保存后关闭窗口。
图1.20 修改表窗口
- 16 -
③在企业管理器右侧窗格中选择department表,右击后,在弹出的快捷菜单中选择“设计表”命令,打开表设计窗口。
④单击depid所在行,单击工具条上的“设置主键”按钮,则向departments表中添加了一个主键。
⑤将depname所在行的“长度”一列的值改为20,保存后关闭窗口。
⑥在企业管理器右侧窗格中选择employees表,右击后,在弹出的快捷菜单中选择“设计表”命令,打开表设计窗口。
⑦单击表设计窗口上的“表和索引属性”按钮,在弹出的菜单中选择“关系”选项卡,并单击“新建”按钮。
⑧在“关系名”文本框中输入FK_emp_dep,在“主键表”列中选中departments表及其中的"dep_id"字段,在“外键表”列中选中employess表及其中的department字段,然后按“关闭”按钮。
⑨单击图1.21中的“约束”选项卡,在其中单击“新建”按钮。在“关系名”文本框中输入CK_emp_salary,在“约束表达式”文本框中输入表达式salary>=0 and salary<=10000,然后按“关闭”按钮。
图1.21
⑩保存后关闭设计窗口。
(3)用企业管理器删除表
在企业管理器右侧窗格中单击要删除的tmp表,右击后,在弹出的快捷菜单中选择“删除”命- 17 -
令,在弹出的如图1.22所示的“除去对象”对话框中单击“全部除去”按钮,则删除了表tmp。
图1.22
7、实例七
本实例讲解用T-SQL语句完成创建、更改和删除表的操作。
(1)使用T-SQL语句创建表。
①创建employess表,打开查询分析器,打开MYDB数据库,输入如下语句:
CREATE TABLE employes(
empid char(10) PRIMARY KEY,
name char(20) NOT NULL,
empartment tinyint NOT NULL,
age tinyint NULL,
memo varchar (60)NULL)
按“F5”执行,创建employees。
②创建departments表,打开查询分析器,打开MYDB数据库,输入如下语句:
CREATE TABLE departments(
depid tinyint NOT NULL,
depname char(10)NOT NULL,
memo varchar(60)NULL)
按“F5”执行,创建department表。
③创建tmp表,打开企业管理器,打开MYDB数据库,输入如下语句:
CREATE TABLE tmp
(id uniqueidentifier)
按“F5”执行,创建tmp表。
(2)使用T-SQL语句修改表。
- 18 -
①修改employess表,打开查询分析器,打开MYDB数据库,输入如下语句:
ALTER TABLE employeesDD
ADD birthdate smalldatetime,
salary float
GO
ALTER TABLE employeesDD
DROP COLUMN age
GO
②修改departments表,打开查询分析器,打开MYDB数据库,输入如下语句:
ALTER TABLE departments
ADD CONSTRAINT PK_dep PRIMARY KEY
(
depid
②为表employess添加外键。
ALTER TABLE employees ADD
CONSTRAIN FK_emp_dep FOREIGN KEY
(department)
REFERENCES departments
(depid)
③将departments表中的depname字段长度改为20。
ALTER TABLE departments
ALTER COLUMN depname char(20)
④为employees表中的salary设置约束。
ALTER TABLE [dbo].[employees] ADD
CONSTRAINT CK_emp_salary CHECK (salary>=0 and salary<=10000)
⑤用T-SQL语句删除表tmp,语句如下:
DROP TABLE tmp
- 19 -
实验二 Transact-SQL 语言及数据检索技术
实验目的
熟练掌握T-SQL语句的使用。
通过练习,掌握常用的数据检索技术。
实验内容
1.数据库操纵语言的使用
2.常用函数的使用
3.数据库定义语言的使用
4.连接操作的使用
实验步骤
首先建立表employees和表departments,下图为表2.1和2.2中使用的数据。
Empid
0001
0002
0003
0004
0005
0006
0007
0008
Name
王丽
李红
王亮
张小阳
刘大伟
赵思佳
李福祥
忘晓思
Department
1
4
2
1
3
3
2
4
Memo
打字员
副经理
Birthdate
1980-3-12
1964-8-25
1970-1-12
Salary
1000
4000
1200
2100
1200
2000
3000
5000
表2.1 employees表中数据
Depid
1
2
Depname
开发部
集成部
Memo
Depid
3
4
Depname
销售部
服务部
Memo
表2.2 departments表中数据
20
1、实例一
本实例讲解使用数据操纵语句,打开查询分析器,输入语句如下:
(1)查询employees表中的所有数据。
SELECT * FROM employees
(2)查询employees表中的所有数据,并将各行标题用汉语表示。
SELECT empid AS 员工编号,name AS姓名,departments AS 部门编号,memo AS 备注,birthdate AS 出生日期,salary AS 工资
(3)查询departments表中的所有数据。
SELECT * FROM departments
2、实例二
本实例讲解连接操作的使用,打开查询分析器,输入如下语句:
(1)查询employees表中的所有数据,并用departments表中的部门名称来取代起编号显示出来。
SELECT ,,e,
ate,
FROM departments INNER JOIN employees
ON =ments
(2)按部门编号的顺序查询employees表中的所有数据,并用departments表中的部门名称来取代其编号显示出来。
SELECT ,,
e,ate,
FROM departments INNER JOIN employees
ON =ments
ORDER BY ments
(3)查询employees表中工资超过2000的职工。
SELECT * FROM employees WHERE salary>2000
(4)查询employees表中工资超过1500,并且属于开发部的人员,并用departments表中的部门名称来取代其编号显示出来。
SELECT ,,
e,ate,
FROM departments INNER JOIN employees
ON =ments
WHERE e='开发部'AND >1500
3、实例三
本实例讲解通配符和聚集函数的使用,打开查询分析器,输入如下语句。
(1)查询employees表中姓望的职工的所有数据。
21
SELECT * FROM employees WHERE name LIKE'王%'
(2)查询employees表中姓名只含有两个字的职工。
SELECT * FROM employees WHERE name LIKE'_'
(3)查询employees表中所有2世纪60年代出生的职工。
SELECT * FROM employees WHERE year(birthday)LIKE'196[0-9]'
(4)找出employees表中所有未添写出生日期的职工。
SELECT * FROM employees WHERE birthdate IS NULL
(5)查询所有开发部员工的工资总额。
SELECT SUM()AS工资和,
e AS部门FROM departments INNER JOIN
employees ON =ments
WHERE e='开发部'
GROUP BY e
(6)查询所有不属于开发部的员工的基本信息。
SELECT ,,ate,, AS 部门
FROM departments INNER JOIN
employees AS e ON =ment
WHERE NOT(e='开发部')
4、实例四
本实例讲解使用分组和排序语句,打开查询分析器,输入如下语句。
(1)显示工资最高的三位员工的信息。
SELECT TOP 3 employees. *
FROM employees
ORDER BY DESC
(2)在所有填写了出生日期的数据中,找出年龄最大的三位员工的信息。
SELECT TOP 3 employees.*
FROM employees
WHERE biethdate is NOT NULL
ORDER BY birthdate
(3)找出所有工资介于2000到3000之间的职工。
select * FROM employees where salary>=2000 and salary<=3000
(4)找出所有在MEMO字段中含有“经理”两子的员工。
SELECT * FROM employees WHERE memo LIKE'%经理%'
(5)找出所有员工中工资最高的、最低的及平均工资。
SELECT MAX(salary)AS'最高工资',MIN(salary)AS'最低工资',
AVG(salary)AS'平均工资'
22
FROM employees
(6)统计employees 表中各部门的人数。语句如下:
SELECT e'部门',count(*)AS'人数'
FROM departments INNER join
employees on =ment
group by e
(7)查询工资高于3000的员工有多少人。语句如下:
SELECT count(*)as '人数'
from employess
where salary>3000
(8)查询各部门的平均工资,并将结果排序。语句如下:
SELECT e,avg(salary)
From employess
INNER join department on ment=
group by e order by avg(salary)
5、实例五
本实例讲解如何使用UPDATE、INSERT和DELETE语句。
(1)向employees表中添加一条数据。
insert into employees
values('0010','赵月','NULL','1980-12-10',null)
(2)将所有“工资”一项为空的职员,工资定为600。
update employees
set salary=600
where salary is null
(3)将所有工资低于1500的职员涨200元。
update employees
set salary =salary+200
where salary<1500
(4)将所有开发部的职员工资上调10%。
update employees set salary=salary*1.1
from employees inner join departments
where e='开发部'
(5)删除所有年龄大于50的员工的数据。
DELETE FROM employees
WHERE year(getdate())-year(birthdate)>50
(6)删除属于销售部的所有员工。
23
DELETE employees
FROM employees inner join departments
on ment=
where e='销售部'
(7)删除所有员工的数据。语句如下:
TRUNCATE TABLE employees
24
实验三 索引、视图及数据转换、备份和恢复技术
实验目的
掌握索引的使用方法
掌握视图的创建和使用
掌握数据库的转换、备份和恢复技术
实验内容
1.索引的使用
2.视图的使用
3.数据库的转换、备份和恢复
实验步骤
1、实例一
本实例讲解如何创建和使用索引。
①为表employees中的name创建索引,要求索引名为IDX_name,索引类型为非聚焦索引。
②为表departments中的 depid 创建索引,要求索引名为IDX_DEPID,索引类型为非聚焦索引。
操作过程:
(1)用企业管理器完成创建索引
创建IDX_name索引文件的操作如下:
①在SQL Server 2000企业管理器中,展开服务器组,然后展开服务器实例。
②展开“数据库”文件夹,再展开要在其中创建索引的数据库mydb。
③单击“表”目录。
④右击目标表employees,然后执行“所有任务”|“管理索引”命令,单击“新建”按钮,此时出现如图3.1所示的“新建索引”对话框。
⑤选择name列,在索引文件名输入“IDX_name”,单击“确定”按钮关闭“新建索引”对话框,返回“管理索引”对话框,单击“关闭”按钮,结束索引建立过程。
⑥创建IDX_depid索引文件的操作,与上述方法相同。
(2)用Transact-SQL语句创建索引操作
①为表employees中的name创建索引,要求索引名为IDX_name,索引类型为非聚集索引。语句如下:
25
USE mydb
GO
CREATE INDEX IDX_name ON employees(name)
GO
②为表departments创建索引,语句如下:
USE mydb
GO
CREATE INDEX IDX_depid ON department(depid)
GO
图3.1 新建索引对话框
2、实例二
本实例讲解如何创建和使用视图。
按要求创建视图
①视图名为empinfo。
②包含字段empid、name、depname、birthdate、 salary。
③字段别名分别是“雇员编号”、“雇员姓名”、“部门”、“出生日期”和“工资”。
④使用INSERT语句通过视图向雇员数据表添加一条记录,要求“姓名”为“张明”、“工资”为“2000”。
⑤使用UADATE语句通过视图将插入记录的雇员工资改为2100。
⑥执行系统存储过程sp_rename将视图改名为“雇佣信息”。
26
(1)使用企业管理器创建视图
步骤如下:
①在SQL Server 2000企业管理器中,展开服务器组,然后展开服务器实例。
②展开“数据库”文件夹,再展开数据库mydb.
③在该数据库下面右击“视图”目录,然后单击“新建视图”命令。
④右击关系图窗格,然后选择“添加表”命令。
⑤当出现 “添加表”对话框时,选择department 和employees,使其出现在关系图窗格中,然后单击“关闭”按钮。
⑥操作网格,选择视图中各列,如图3.2所示。
⑦在工具栏上单击“运行”按钮,在数据结果区将显示包含在视图中的数据行。
⑧在工具栏上单击“保存”按钮,弹出保存视图对话框,在该对话框中输入视图名empinfo,单击“确定”按钮完成视图的创建。
图3.2 创建视图对话框
(2)使用Transact-SQL
打开查询分析器,在查询窗口输入CREATE VIEW语句创建视图,并指定字段别名。语句如下:
USE mydb
CREATE VIEW empinfo(雇员编号,雇佣姓名,部门,出生日期,工资)
AS
27
SELECT ,,e,
ate,y
FROM departments INNER JOIN
Employees ON =ment
GO
EXEC sp_helptext’empinfo’
GO
(3)使用INSERT语句通过视图向雇员数据表中添加一条记录,要求姓名为“张明”、工资为2000。语句如下:
USE my_db
INSERT INTO empinfo(雇员姓名,工资)
VALUES (‘张明’,2000)
GO
(4)使用UPDATE语句通过视图将插入记录的雇员工资改为2100,语句如下:
USE mydb
GO
UPDATE empinfo
SET 工资=2100
WHERE 雇员姓名=‘张明’
GO
(5)执行系统存储过程sp_rename 将视图改名为“雇员信息”,语句如下:
USE mydb
GO
EXEC sp_rename ‘empinfo’,‘雇员信息’
3、实例三
本实例主要讲解使用SQL Server 2000企业管理器备份和恢复数据库MYDB,数据转换可以参阅讲稿中的相关内容。
操作过程:
(1)创建备份设备
①打开企业管理器并展开服务器,展开其中的“管理”节点,右击“备份”,在快捷菜单中选择“新建备份设备”命令。
②在弹出“备份设备属性-新设备”对话框中,在“名称”文本框中键入“MYDB备份设备”,如图3.3所示。
28
图3.4 备份设备属性对话框
③单击“确定”按钮。
(2)备份数据库
①在企业管理器的服务器中,右击其中的数据库MYDB,在弹出的快捷菜单中执行“所有任务”|“备份数据库”命令。
②在出现的“SQL Server备份”对话框中选择“常规”选项卡。
③在该选项卡的“名称”文本框中键入“MYDB”数据库备份。
④在“备份”单选钮中选择“数据库-完全”选项。
⑤单击“添加”按钮,在弹出的对话框中选择“数据库-完全设备”,然后从下拉列表中选择“MYDB备份设备”如图3.5所示。
⑥单击“选项”选项卡,在该选项卡中选中“完成验证备份”复选框。
⑦单击“确定”按钮。
⑧出现“备份进度”对话框,备份完成后,将弹出消息框“备份操作及验证已成功完成”
29
图3.5 备份数据库对话框
⑨单击“确定”完成数据库备份。
(3)恢复数据库
①在企业管理器的服务器中,右击要还原的数据库MYDB,在弹出的快捷菜单中执行“所有任务”|“还原数据库”命令。
②在出现的“还原数据库”对话框的“还原”单选钮组中选中“从设备”单选钮。
③单击“选择设备”钮,从弹出的对话框中选择备份设备“MYDB备份设备”。
④单击选钮“还原备份集”,选择其中的单选钮“数据库-完全”,如图3.6所示。
30
图3.6 还原数据库对话框
⑤单击“确定”按钮,执行还原操作。
⑥出现“还原进度”对话框,还原完成后,将弹出消息框“数据库MYDB的还原已顺利完成”。
⑦单击“确定”按钮。
31
实验四 触发器及存储过程、自定义函数
实验目的
掌握触发器的使用
掌握存储过程的使用
掌握使用自定义函数
实验内容
1.触发器的创建和使用
实验步骤
1、实例一
本实例讲解创建触发器。
使用T-SQL语句,按下列要求对数据库MYDB的表employees创建、删除触发器。
①基于表employees创建AFTER INSERT触发器NEWEMP,将插入员工的工资额限制在1000以内。
②基于表employees创建AFTER UPDATE触发器CHANGEMP,将员工的工资变动额限制在1500以内。
③使用DROP TRIGGER语句删除用户创建的触发器
打开查询分析器,输入具体语句如下:
(1)创建AFTER INSERT触发器。
USE MYDB
GO
CREATE TRIGGER NEWEMP ON employees
AFTER INSERT
AS
IF(SELECT salary FROM inserted)>100
BEGIN
END
32
PRINT ‘新员工工资不能超过1000’
ROLLBACK
GO
(2)创建AFTER UPDATE触发器。
USE MYDB
GO
CREATE TRIGGER CHANAGEMP ON employees
BEGIN
END
GO
IF(SELECT MAX( ABS())
FROM inserted JOIN deleted
ON =)>1500
BEGIN
PRINT ‘员工工资变动不能超过1500’
ROLLBACK
END
(3)使用DROP TRIGGER语句删除用户创建的触发器。
DROP TRIGGER NEWEMP,CHANGEMP
本实例讲解复合触发器的使用。
2、实例二
(1)在示例pubs数据库的employee表中创建一个For Insert,Update触发器,用于检测输入的日期是否合理。
CREATE TRIGGER employee_insupd ON employee
FOR insert,update
AS
DECLARE @min_lvl tinyint,@max_lvl tinyint,
@emp_lvl tinyint,@job_id smallint
SELECT @min_lvl=min_lvl,@max_lvl=max_lvl,
@emp_lvl=_lvl,@job_id=_id
FROM employee e,jobs j,inserted i
WHERE _id=_id and _id=_id
IF (@job_id=1)and(@emp_lvl<>10)
BEGIN
raiserror('job id 1 expects the default level of 10.',16,1)
RollBack Transaction
END ELSE
IF (not @emp_lvl Between @min_lvl and @max_lvl)
33
BEGIN
END
可以使用以下语句来测试触发器:
insert employee (emp_id,fname,lname,job_id,job_lvl,pub_id)
values(‘ugv21716m',‘ugv',‘dafe',1,10,1389)
3、实例三
本实例讲解UPDATE函数的使用。
IF EXISTS(Select name from sysobjects where name=‘Tri_Upd_Publishers'and type=‘TR')
DROP TRIGGER Tri_Upd_Publishers
GO
CREATE TRIGGER Tri_Upd_Publishers
ON publishers
FOR update
AS
DECLARE @sCountry varchar(30)
IF UPDATE(pub_name)
BEGIN
END
IF UPDATE(country)
BEGIN
SELECT @sCountry=country
FRON inserted
IF @sCountry NOT IN (‘USA',‘France',‘Germany',‘China')
BEGIN
END
END
GO
ROLLBACK TRAN
PRINT‘The row can not be updated'
print ‘Cannot change pub_name'
ROLLBACK TRAN
raiserror(‘the level for job_id:%d should be between %d and %d',
16,1,@job_id,@min_lvl,@max_lvl)
ROLLBACK tran
34
4、实例四
分别使用SQL Server 2000企业管理器的向导和Transact-SQL语句,按下列要求创建、修改和删除存储过程。
(1)用存储过程向导在数据库MYDB中为department表创建一个插入存储过程insert_department。
①打开企业管理器,选择工具菜单中的向导选项,在弹出对话框窗口,双击“数据框”,选择“存储过程向导”则出现欢迎使用创建存储过程向导对话框。
②单击“下一步”按钮,选择希望存储过程保存的数据库。在下拉表中选择MYDB数据库,单击“下一步”按钮,显示出当前数据库中所有的表。
③选择departments表创建一个插入的存储过程,然后单击“下一步”按钮,单击“完成”按钮,表示一个插入存储过程创建完毕。
④如果需要对某个存储过程进行设置,可以在改对话框选定该存储过程,然后单击“编辑”按钮,打开“编辑存储过程属性”对话框,在该对话框内可以完成对该存储的设置,逐步完成对每一个存储过程的设置以后,返回到对话框“正在完成创建存储过程向导”单击“完成”按钮,至此,成功完成了一个存储过程的创建。
(2)用Transact-SQL语句在数据库MYDB中创建存储过程Salary_dept,要求返回指定部门所有雇员的工资总和,其中指定部门的名称以存储过程的输入参数进行传递。打开查询分析器,输入如下的语句:
USE my_db
CREATE PROCEDRE Salary_dept
@Dept tinyint,
@Total money OUTPUT
As
SELECT @ Total=SUM(salary)
FROM employees
WHERE department=@dep
GO
PRINT’该部门的工资总和’+CONVERT(VARCHAR,@Total)
GO
执行这个存储过程,语句如下:
EXECUTE salary_dept 1,@Total OUTPUT
35
实验五 管理SQL SERVER
实验目的:
掌握登陆帐户的管理
掌握服务器角色和数据库角色的管理
实验内容:
1.登陆帐户的管理
2.数据库权限和用户权限的管理
实验步骤:
使用企业管理器和Transact-SQL语句完成权限的管理。具体要求如下:
①创建一个用户名为newuserl,口令‘pswdl’的登陆帐户
②创建一个数据库用户。
③为数据库用户设置权限。
1、实例一
本实例讲解如何使用企业管理器完成权限管理。
操作过程:
(1)用SQL企业管理器来创建登陆帐户
①打开企业管理器并展开服务器,展开其中的“安全性”节点。
②右击“登陆”图标,从弹出的快捷菜单中选择“新建登陆”命令,弹出“新建登陆”对话框。
③在“常规”选项卡的“名称”文本框中输入newuserl。
④在“身份验证”区域选中“SQL Server身份验证”单选钮,在“密码”文本框中输入pswdl.
⑤单击“确定”按钮,在弹出的“确定密码”对话框中再输入一次pswdl。
⑥单击“确定”按钮创建登陆。
(2)用企业管理器创建数据库用户
①打开企业管理器并展开服务器,展开其中的“数据库”节点。
②打开要创建新用户的数据库,右击“用户”图标,从弹出的快捷菜单中选择“新建用户”对话框。
③在“登陆名”下拉框内选择已经创建的登陆帐号,在“用户名”文本框呢输入数据库用36
户名。
④在“数据库角色成员”下的选项框中为该用户选择数据库角色。
⑤单击“确定”按钮。
(3)用企业管理器管理用户权限
①打开企业管理器并展开服务器,展开其中的“数据库”节点。
②展开其中的某一数据库,单击“用户”图标则将在右侧窗格中显示该数据库的所有用户。
③在数据库用户清单中选择要进行权限设置的用户,右击用户名后的在弹出的快捷菜单中选择“属性”,在弹出“数据库用户属性”对话框。
④单击对话框中的“权限”按钮,在弹出的对话框中进行对象权限设置。
⑤单季“确定”按钮完成权限设置。
2、实例二
本实例讲解使用T-SQL语句完成权限管理。
(1)用T-SQL语句来创建登陆用户,打开查询分析器,输入如下语句:
Sp_addlogin newuser2,pswd2
(2)用T-SQL语句来创建数据库用户。
USE northwind
GO
EXEC sp_adduser ‘newuser2’,Is
GO
(3)用T-SQL语句来设置用户权限。
USE mydb
GO
CRANT INSERT,UPDATE,DELETE,SELECT
ON employees
TO newuserl
GO
37
实验六 事务处理与事务日志
实验目的
掌握事务的定义和使用
比较事务与触发器、存储过程
管理事物
实验内容
1.隐式事务的使用
2.显式事务的使用
3.比较事务与触发器、存储过程
实验步骤
1、实例一
本实例讲解显示事务的定义和使用。打开查询分析器,输入如下语句:
(1)建立一个单语句显式事务。
Begin Tran
Update roysched
set royalty=royalty*1.10
where title_id Like 'Pc%'
Commit Tran
(2)建立一个多语句显式事务。打开查询分析器,输入如下语句:
BEGIN Tran
UPDATE table_a --对第一个表更新
set x=x+1
where y=100
UPDATE table_b --对第二个表更新
SET z=z+1
--如果没有行被更新,撤销事务
IF @@rowcount=0 or @@error!=0
BEGIN
38
--撤销事务
ROLLBACK Tran
Print '发生错误,没有行被更新'
RETURN
COMMIT Tran
2、实例二
本实例讲解隐式事务的定义和使用。打开企业管理器,输入如下语句:
SET implicit_Transactions ON
INSERT publishers
VALUES(‘9921',‘Workers Press',‘Beijing',‘Bj',‘China')
COMMIT TRAN
SET implicit_Transactions OFF
上述语句相当于下述显示事务
BEGIN TRAN
INSERT publishers
VALUES(‘9921’,‘Workers Press’,‘Beijing’,‘Bj’,‘China’)
COMMIT TRAN
本实例讲解事务与触发器。打开查询分析器,输入如下语句:
CREATE TRIGGER Tri_Upd_Publishers
3、实例三
ON publishers
FOR UPDATE
AS
IF UPDATE(pub_name)
BEGIN
END
GO
当执行如下修改语句:
UPDATE Publishers
SET pub_name=pub_name+'press'
相当于如下完整的事务
BEGIN Tran
UPDATE publishers
SET pub_name=pub_name+‘press'
39
print ‘Cannot change pub_name'
ROLLBACK Tran
IF UPDATE(pub_name)
BEGIN
print ‘cannot change pub_name'
ROLLBACK Tran
END
Commit Tran
4、实例四
本实例讲解事务与存储过程,在存储过程中创建事务。打开查询分析器,输入如下语句:
CREATE PROCEDURE MyProc
@param INT
AS
print ‘Begin Proc'
Print @@TRANCOUNT
BEGIN Tran
print ‘Begin Tran2'
print @@Trancount
INSERT [sample]
VALUES (@param)
print @@Trancount
IF (select count(*) from [sample])>3
BEGIN
Print 'RollBack Tran'
RollBack Tran
Print @@Trancount
END
ELSE BEGIN
print ‘Commit Tran2'
Commit Tran
print @@Trancount
END
GO
执行这个存储过程,在已经添加了3行记录的情况下,在显式事务下执行该存储过程,例如:
BEGIN Tran
EXEC MyProc 5
COMMIT Tran
40
在执行后,将产生错误,分析错误产生的原因,并将其解决。
41
实验七 通过C#访问SQL Server(综合性实验)
实验目的
通过实验掌握系统前台开发及后台的数据管理功能的实现。
实验内容
结合SQL SERVER与C#相关知识,开发一个班级通讯录系统。
42


发布评论