《SQL-SERVER-数据库应用》实验指导书-2015版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据库应用》实验教学大纲一、基本信息
二、实验安排
三、实验目的、内容与要求
实验一创建数据库和表以及表操作
(一) 实验目的
1.了解SQL Server数据库的逻辑结构和物理结构,表的结构特点;
2.了解SQL Server的基本数据类型,空值概念;
3.学会在企业管理器中创建数据库和表;
4.学会使用T—SQL语句创建数据库和表;
5.学会在企业管理器中对数据表进行插入、修改、删除数据操作;
6.学会使用T-SQL对数据表进行插入、修改、删除数据操作;
(二) 实验内容
1.企业管理器访问数据库,查询分析器的使用;
2.在企业管理器中创建、删除数据库和表;
3.使用T-SQL语句创建数据库和表;
4.在企业管理器中对数据表进行插入、修改、删除数据操作;
5.使用T-SQL进行上述操作。
(三) 实验要求
1.掌握在企业管理器中创建、修改、删除数据库和表;
2.掌握查询分析器,使用T—SQL语句创建、修改、删除数据库和表。
实验二数据库的查询
(一) 实验目的
1.掌握SELECT语句的基本语法;
2.掌握子查询的表示;
4.掌握数据汇总的方法;
5.掌握SELECT语句的GROUP BY子句的作用和使用方法;
6.掌握SELECT语句的ORDER BY子句的作用和使用方法。
(二) 实验内容
1.SELECT语句的基本使用;
2.子查询的使用,连接查询的使用,数据汇总,Group By、Order By子句的使用。
(三) 实验要求
1.掌握数据库查询的基本的常用语句的使用方法;
2.掌握数据库查询中的分组、排序等语句的使用方法。
实验三视图、存储过程、触发器等的建立与维护
(一) 实验目的
1.学会使用企业管理器建立视图,应用视图插入、删除、修改数据;
2.掌握存储过程的使用方法;
3.掌握触发器的使用方法。
(二) 实验内容
1.视图插入、删除、修改数据;
2.创建存储过程,调用存储过程;
3.创建触发器。
(三) 实验要求
1.利用所创建的数据库和数据表,综合应用视图、存储过程、触发器等知识完善数据库;
2.掌握应用更新视图数据可以修改基本表数据的方法;
3.熟练掌握添加、修改、删除记录的存储过程的定义及调用;
4.掌握通过触发器来实现数据的参照完整性。
实验四基于SQL Server数据库的学生信息管理系统的建立
四、考核方式
实验的考核方式: 根据实验预习情况、实验出勤情况、原型系统效果验收和实验报告的完成情况确定最终的实验成绩,实验成绩占课程总成绩的20%。
实验成绩按百分制。
实验预习情况:A 实验出勤情况:B 原型系统效果验收和实验报告:C
实验成绩=A*20%+B*20%+C*60%
五、建议教材与教学参考书
1、建议教材
[1]郑阿奇.SQL Server实用教程.第二版.北京:电子工业出版社.2005
[2] 张丽霞.数据库应用实验指导书.自编.2005
2、教学参考书
[1]李存斌.数据库应用技术--SQL Server 2000简明教程.北京:中国水利水电出版社.2001
[2]钱雪忠,罗海驰,程建敏.SQL SERVER 2005实用技术及案例系统开发.第一版.北京:清华大学出版社.2007
[3]李春葆,曾惠.SQL SERVER 2000应用系统开发教程.第一版.北京:清华大学出版社.2005
[4] 李春葆,曾惠.SQL SERVER 2000学习与上机实验指导.第一版.北京:清华大学出版社.2005
[5]李存斌.数据库应用技术----SQL Server 2000简明教程.第一版.北京:中国水利水电出版社.2002
编制者:数据库课程组组长:郭琳
执笔人:云静编制时间:2013年8月
实验一创建数据库和表以及表操作
一、实验目的
1.了解SQL Server数据库的逻辑结构和物理结构,表的结构特点;
2.了解SQL Server的基本数据类型,空值概念;
3.学会在企业管理器中创建数据库和表;
4.学会使用T—SQL语句创建数据库和表;
5.学会在企业管理器中对数据表进行插入、修改、删除数据操作;
6.学会使用T-SQL对数据表进行插入、修改、删除数据操作;
二、实验内容
1.实验题目(1)
创建用于企业管理的员工管理数据库,数据库名为YGGL,包含员工的信息、部门信息以及员工的薪水信息。
数据库YGGL包含下列3个表。
(1)Employees:员工自然信息表。
(2)Departments:部门信息表。
(3)Salary:员工薪水情况表。
各表的结构分别如表T2.1,表T2.2,表T2.3所示。
表T2.2 Departments表结构
表T2.3 Salary表结构
实验步骤
1.在企业管理器中创建数据库YGGL
要求:数据库YGGL初始大小为10MB,最大大小为50MB,数据库自动增长,增长方式是按5%比例增长;日志文件初始为2MB,最大可增长到5MB(默认为不限制),按1MB增长(默认是按5%比例增长)。
数据库的逻辑文
sql\data\MSSQL为SQL Server的系统安装目录;事务日志的逻辑文件名和物理文件名也均采用默认值分别为YGGL—LOG和 e:\sql\data\MSSQL\Data\YGGL_Log.1df。
以系统管理员Administrator是被授权使用CREATE DATABASE语句的用户登录SQL Server服务器,启动企业管理器一>在服务器上单击鼠标右键一>新建数据库一>输入数据库名“YGGL”一>选择“数据文件”选项卡一>设置增长方式和增长比例一>选择“事务口志”选项卡一设置增长方式和增长比例。
注意:在“数据文件”选项卡和“事务曰志”选项卡中可以分别指定数据库文件和曰志文件的物理路径等特性。
2.在企业管理器中删除创建的YGGL数据库
在企业管理器中选择数据库YGGL一>在YGGL上单击鼠标右键一删除。
3.使用T—SQL语句创建数据库YGGL
按照实验步骤1中的要求创建数据库YGGL。
启动查询分析器一>在“查询”窗口中输入以下T—SQL语句:
CREATE DAIABASE YGGL
ON
( NAME=’YGGL_Data’,
FILENAME=’e:ksql\data\MSSQL\Data\YGGL.mdf,
SIZE=10MB, 、
MAXSIZE=50MB,
FILEGROWTH=5%)
LOGON
( NAME=’YGGL_Log’,
FILE NAME=’e:\sql\data\MSSQL\Data\YGGL_Log.1df,
SIZE=2MB,
MAXSIZE=5MB,
FILEGROWTH=1MB)
G0
单击快捷工具栏的执行图标,执行上述语句,并在企业管理器中查看执行结果。
4.在企业管理器中分别创建表Employees,Departments和Salary
在企业管理器中选择数据库YGGL一>在YGGL上单击鼠标右键一>新建一>表一>输入 Employees表各字段信息一>单击保存图标一>输入表名Employees,即创建厂表Employees。
按同样的操作过程创建表Departments和Salary。
、
5.在企业管理器中删除创建的Employees,Departments和Salary表
在企业管理器中选择数据库YGGL的表Employees 在Employees上单击鼠标右键一>删除,即删除了表Employees。
按同样的操作过程删除表Departments和Salary。
6.使用T—SQL语句创建表Employees,Departments和Salary
启动查询分析器一.在“查询”窗口中输入以下T—SQL语句:
USE YGGL
CREATE TABLE Employees
( EmployeeID char(6)NOT NULL,
Name char(10)NOT NULL,
Birthday datetime NOT NULL,
Sex bit NOT NULL,
ddress char(20)NOT NULL,
Zip char(6)NULL,
PhoneNumber char(12)NULL,
EmailAddree char(20)NULL,
DepartmentlD char(3)NOT NULL
GO
单击快捷工具栏的执行图标,执行上述语句,即可创建表Employees。
按同样的操作过程创建表Departments 和Salary,并在企业管理器中查看结果。
2.实验题目(2)
分别使用企业管理器和T—SQL语句,向在以下实验步骤1建立的数据库YGGL的3个表Employees,Departments和Salary中插入多行数据记录,然后修改和删除一些记录。
使用 T—SQL进行有限制的修改和删除。
实验准备、
首先了解对表数据的插入、删除、修改都属于表数据的更新操作。
对表数据的操作可以在企业管理器中进行,也可以由T-SQL语句实现。
其次要掌握T-SQL中用于对表数据进行插入、修改和删除的命令分别是INSERT, UPDATE和DELETE(或TRANCATE TABLE)。
要特别注意在执行插入、删除、修改等数据更新操作时,必须保证数据完整性。
此外,还要了解使用T-SQL语句在对表数据进行插入、修改及删除时,比在企业管理器中操作表数据更为灵活,功能更强大。
实验步骤
1.在企业管理器中向数据库YGGL表加入数据
2.(1)在企业管理器中向表Employees中加入如表T3.1所示的记录。
表T3.1数据记录
在企业管理器中选择表Employees→在其上单击鼠标右键一>选择“返回所有行”
一>逐字段输入各记录值,输入完后,关闭表窗口。
(2)在企业管理器向表Departments中插入如表T3.2所示的数据记录。
表T3.2数据记录
(3)在企业管理器中向表Salary中插入如表T3.3所示的数据记录。
表T3.3数据记录
2.在企业管理器中修改数据库YGGL表数据
(1)在企业管理器中删除表Employees的第2,8行和Salary的第2,11行。
注意进行删除操作时,作为两表主键的EmployeeID的值,以保持数据完整性。
在企业管理器中选择表Employees—>在其上单击鼠标右键一>选择“返回所有行”
一>选择要删除的行一>单击鼠标右键一>删除一>关闭表窗口。
(2)企业管理器中删除表Departments的第2行,同时也要删除表Employees的第
2行。
操作方法同(1)。
(3)在企业管理器中将表Employees中编号为020018的记录的部门号改为4。
在企业管理器中选择表Employees→在其上单击鼠标右键一选择“返回所有行”一>将光标定位至编号为020018的记录的DepartmentID字段,将值1改为4。
3.使用T-SQL命令修改数据库YGGL表数据
(1)使用T-SQL命令分别向YGGL数据库Employees,Departments和Salary表中插入1行记录。
启动查询分析器一>在“查询”窗口中输入以下T—SQL语句:
USE YGGL
INSERT INTO Employees
VALUES(’011112’,’罗林’,’1973-5-3’,1,’解放路100号’,210002,4055663,NULL,5)
INSERT INTO Departments
VALUES(‘2’,’人资源部’,NULL)
Go
INSERT INTO Salary
VALUES(’011112’,1200.09,50)
GO
单击快捷工具栏的执行图标,执行上述语句。
注意:在企业管理器中分别打开YGGL数据库Employees,Departments和Salary表,观察数据变化。
(2)使用T—SQL命令修改表Salary中的某个记录的字段值。
启动查询分析器一》在“查询”窗口中输入以下T—SQL语句:
USE YGGL
UPDATE Salary
SET income=2890
WHERE EmployeelD=t011112’
Go
单击快捷工具栏的执行图标,执行上述语句,将编号为011112的职工收入改为2890。
注意:在企业管理器中分别打开YGGL数据库Salary表,观察数据变化。
(3)修改表Employees和Departments的记录值,仍要注意完整性。
操作过程同(2)。
(4)使用T—SQL命令修改表Salary中的所有记录的字段值。
启动查询分析器一>“查询”窗口中输入以下 T—SQL语句:
USE YGGL
UPDATE Salary
SET InCome=InCome+100
GO
单击快捷工具栏的执行图标,执行上述语句,将所有职工的收入增加100。
可见,使用T—SQL语句操作表数据比在企业管理器中操作表数据更为灵活。
注意:输入以下T—SQL语句,观察数据变化。
SELECT * FROM Salary
(5)使用TRANCATE TABLE语句删除表中所有行。
启动查询分析器一>在“查询”窗口中输入以下 T—SQL语句:
USE YGGL
TRANCATE TABLE Salary
GO
单击快捷工具栏的执行图标,执行上述语句,将删除Salary表中的所有行。
注意:实验时一般不轻易做这个操作,因为后面实验还要用到这些数据。
如要试验该命令的效果,可建一个临时表,输入少量数据后进行。
实验二数据库的查询
一、实验目的
1.掌握SELECT语句的基本语法;
2.掌握子查询的表示;
3.掌握连接查询的表示;
4.掌握数据汇总的方法;
5.掌握SELECT语句的GROUP BY子句的作用和使用方法;
6.掌握SELECT语句的ORDER BY子句的作用和使用方法。
1.SELECT语句的基本使用
(1)对于实验1给出的数据库表结构,查询每个雇员的所有数据。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SEIECT *
FROM Employees
GO
【思考与练习】
用SELECT语句查询Departments和Salary表的所有记录。
(2)查询每个雇员的地址和电话。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Address,PhoneNumber
FROM Employees
GO
【思考与练习】
用SELECT语句查询Departments和Salary表的一列或若干列。
(3)查询EmployeeID为000001的雇员的地址和电话。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Address,PhoneNumber 7
FROM Employees
WHERE EmployeelD=’000001’
GO
【思考与练习】
用SELECT语句查询Departments和Salary表中满足指定条件的1列或若干列。
(4)查询Employees表中女雇员的地址和电话,使用AS子句将结果中各列的标题分别指定为地址、电话。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Address AS地址.PhoneNumber AS电话
FROM Employees
WHERE sex=0
Go
注意:使用AS子句可指定目标列的标题。
(1)计算每个雇员的实际收入。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT EmployeelD,实际收入=InCome—OutCome
FROM Salary
G0
(2)找出所有姓王的雇员的部门号。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT DepartmentID
FROM Employees
WHERE name LIKE’王%’
Go
(3)找出所有收入在2000~3000元之间的雇员号码。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT EmployeelD
FROM Salary
WHERE InCome BETWEEN 2000 AND 3000
GO
【思考与练习】
找出所有在部门‘1’或‘2’工作的雇员的号码。
注意:在SELECT语句中LIKE、BETWEEN…AND,,IN,NOT及CONTAIN谓词的作用。
3.子查询的使用
(1)查找在财务部工作的雇员的情况。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT *
FROM Employees .
WHERE DepartmentlD= 。
(SELECT DepartmentlD
FROM Departments
WHERE DepartmentName=’财务部’)
GO
【思考与练习】
用子查询的方法查找所有收入在2500元以下的雇员的情况。
(2)查找财务部年龄不低于研发部雇员年龄的雇员的姓名。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Name
FROM Employees
WHERE DepartmentID IN
(SELECT DepartmentID
FROM Departments
WHERE DepartmentName’财务部’)
AND
Birthday!>ALL(SELECT Birthday
FROM Employees
WHERE DepartmentlD IN
(SELECT DepartmentlD
FROM Departments
WHERE DepartmentName=’研发部’))
GO
【思考与练习】
用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的姓名。
(3)查找比所有财务部的雇员收入都高的雇员的姓名。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Name
FROM Employees
(SELECT EmployeelD
FROM Salary
WHERE InCome> .
ALL ( SELECT InCome
FROM Salary
WHERE EmployeelD IN
(SELECT EmployeelD
FROM Employees
WHERE DepartmentlD=
(SELECT DepartmentlD
FROM Departments
WHERE DepartmentName=’财务部’))))
GO
【思考与练习】
用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名。
3.连接查询的使用
(1)查询每个雇员的情况以及其薪水的情况。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Emploees.*,Salary.*
FROM Employees,Salary
WHERE Elmployees.EmployeelD=Salary.EmployeelD
GO
【思考与练习】查询每个雇员的情况以及其工作部门的情况。
(2)查找财务部收入在2200元以上的雇员姓名及其薪水详情。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Name,InCome,OutCome
FROM Employees,Salary,Departments
WHERE Employees.EmployeelD=Salary.EmployeelD AND Employees.DepartmentlD =Departments.DepartmentlD AND DepartmentName=’财务部’AND InCome>2000 GO
【思考与练习】查询研发部在1966年以前出生的雇员姓名及其薪水详情。
4.数据汇总
(1)求财务部雇员的平均收入。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT AVG(InCome)AS ’财务部平均收入’
FROM Salary
WHERE EmployeelD IN
(SELECT EmployeelD
FROM Employees
WHERE DepartmentlD=
(SELECT DepartmentlD
FROM Departments
WHERE DepartmentName=’财务部’))
GO
(3)求财务部雇员的平均实际收入。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT AVG(1nCome-OutCome)AS‘财务部平均实际收入’
FROM Salary
WHERE EmployeelD IN
(SELECT EmployeeID
FROM Employees
WHERE DepartanentlD =
(SELECT DepartmentlD
FROM Departments
WHERE DepamnentName=’财务部’))
GO
【思考与练习】
查询财务部雇员的最高和最低实际收入。
(4)求财务部雇员的总人数。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT COUNT(EmployeelD)
FROM Employees
WHERE DepartmentlD=
(SELECT DepartmentlD
FROM Departments
WHERE DepartmentName=’财务部’)
GO
【思考与练习】统计财务部收入在2500元以上雇员的人数。
5.GROUP BY,ORDER BY子句的使用
(1)求各部门的雇员数。
在查询分析器的窗口输入如卜^的语句并执行:
USE YGGL
SELECT COUNT(EmployeelD)
FROM Employees
GROUP BY DepartmentID
Go
【思考与练习】统计各部门收入在2000元以上雇员的人数。
(2)将各雇员的情况按收入由低到高排列。
在查询分析器的窗口输入如下的语句并执行:
USE YGGL
SELECT Employees.*,Salary.*
FROM Employees,Salary
WHERE Employees.EmployeeID=Salary.EmployeeID
ORDER BY InCome
G0
【思考与练习】将各雇员的情况按出生时间先后排列。
实验三视图、存储过程、触发器等的建立与维护一、实验目的
1.学会使用企业管理器建立视图,应用视图插入、删除、修改数据;
2.掌握存储过程的使用方法;
3.掌握触发器的使用方法。
二、实验内容
此实验是综合视图、存储过程、触发器等知识应用的一个综合性实验。
实验要求:
1.利用所创建的数据库和数据表,综合应用视图、存储过程、触发器等知识完善数据库;
2.掌握应用更新视图数据可以修改基本表数据的方法;
3.熟练掌握添加、修改、删除记录的存储过程的定义及调用;
4.掌握通过触发器来实现数据的参照完整性。
实验内容要求:
利用员工管理数据库YGGL中 3个表:
Employees:员工自然信息表、Departments:部门信息表、Salary:员工薪水情况表。
(1)利用YGGL各表建立视图实现各种连接查询。
建立视图view1,查询所有职工的员工编号、姓名、部门名和收入,并按部门名顺序排列。
建立视图view2,查询所有职工的员工编号、姓名和平均工资。
建立视图view3,查询各部门名和该部门的所有职工平均工资。
(2)编写对YGGL各表进行插入、修改、删除操作的存储过程,然后编写程序,调用这些存储过程。
创建一个为Employees表添加员工记录的存储过程add Employees。
创建一个存储过程del Employees删除Employees 表中指定员工编号的记录。
(3)对于YGGL数据库,请用触发器实现两个表间的参照完整性。
在表Departments上创建一个触发器Departments_update,当更改部门编号时同步更改Employees表中对应的部门编号。
在表Employees上创建一个触发器Employees _delete,当删除员工记录时同步删除salary表中对应的工资收入记录。
参考实例步骤:
1.创建视图
(1)班级表(U_CLASSES ):ID含义为"班号",CLASS含义为"班名",DEPARTMENT含义为所在系,各字段类型按需要设置是否允许为空,ID字段被设置为主键。
(2)成绩表(U_SCORES ):STUDENT_ID含义为学号,COURSE_ID含义为课程号,SCORE为成绩,各字段类型按需要设置是否允许为空,STUDENT_ID 、COURSE_ID字段被设置为主键。
(3)课程表(U_COURSES):COURSE含义为课程名称, ID含义为课程编号,CREDIT含义为课程学分。
(4)学生表
1.用企业管理器建立一个基于学生表、课程表、成绩表的视图,要求该视图显示学号、姓名、课程、成绩。
1)启动企业管理器、注册、连接
2)展开服务器、数据库、在视图上右击,在快捷菜单中执行"新建视图(V)..."
3)在新视图窗口内的关系图窗格内右击鼠标,弹出的菜单即为视图设计菜单,执行"添加表(B)..."
4)再在添加表对话框中选择U_SCORES表,再单击添加按钮。
5)依此操作,分别添加U_STUDENTS、U_COURSES表,单击关闭按钮。
6)再在关系窗格内,拖动U_STUDENTS表的"ID"至U_SCORES的STUDENT_ID,拖动U_COURSES表的"ID"至
U_SCORES的COURSE_ID,再分别选中U_STUDENTS表的"ID","NAME"列(列前的复选框),U_COURSES表的"COURSE"列以及U_SCORES表的"SCORE"列,然后单击"!"按钮,显示视图结果。
7)单击保存按钮,将视图保存为V_SCORES,单击确定。
2.用查询分析器建立一个基于学生表、班级表的学生视图(V_STUDENTS),包括学号、姓名、班级、系,SQL
语句如下:
1)CREATE VIEW dbo.V_STUDENTS
2)AS
3)SELECT dbo.U_STUDENTS.ID,dbo.U_, dbo.U_CLASSES.CLASS,
dbo.U_CLASSES.DEPARTMENT
4)FROM dbo.U_STUDENTS INNER JOIN
5)dbo.U_CLASSES ON dbo.U_STUDENTS.CLASS_ID = dbo.U_CLASSES.ID
3.自己写一个SQL语句建立一个基于课程表的视图(V_COURSES),要求显示课程编号、课程名、学分。
2.创建存储过程
在查询分析器编辑窗口输入各存储过程的代码并执行以下程序。
(1)添加职员记录的存储过程EmployeeAdd:
USE YGGL
GO
CREATE PROCEDURE Emplo)reeAdd
(@employeeid char6),@name char(10),@birthday datetime,
@sex bit,@address char(20),@zip char(6),@phonenumber char(12),
@emailaddress char(20),@departmenflD char(3))
AS
BEGIN
INSERT INTO Employees
VALUES(@employeeid,@name,@birthday,@sex,@address,
@zip,@phonenumber,@emailaddress,@departmentlD)
END
RETURN
GO
(2)修改职员记录的存储过程EmployeeUpdate:
USE YGGL
GO
CREATE PROCEDURE EmployeeUpdate
(@empid char(6),@employeeid char(6),@name char(10),@birthday datetime,
@sex bit,@address char(20),@zip chat(6),@phonenumber char(12),
@emailaddress char(20),@departmentlD char(3))
AS
BEGIN
UPDATE Employees ‘
SET Employeeid=@employeeid,
Name=@name.
Birthday=@birthday,
Sex=@sex,
Address=@address.
Zip=@zip,
Phonenumber=-@phonenumber,
Emailaddree=@emailaddress.
DepartmentD=@departmenflD
WHERE Employeeid=@empid
END
RETURN
GO
(3)删除职员记录的存储过程EmployeeDelete:
USE YGGL
GO
CREATE PROCEDURE EmployeeDelete
(@employeeid char(6))
AS
BEGIN
DELETE FROM Employees
WHERE Employeeid=@employeeid
END
RETURN
G0
3.调用存储过程
USE YGGL
EXEC EmployeeAdd’990230’,’刘朝’,’890909’,1,’武汉小洪山5号’,”,”,”,’3’
GO
USE YGGL
EXEC Employeeupdate’990230’,’990232’,’刘平’,’890909’ ,1,’武汉小洪山5号’,”,”,”,’2’
GO
USE YGGI,
EXEC EmployeeDelete’990232’
GO
分析一下此段程序执行时可能出现哪几种情况。
【思考与练习】
编写如下T-SQL程序:
(1)自定义1个数据类型,用于描述YGGL数据库中的DepartmentlD字段,然后编写代码重新定义数据库各表。
(2)编写对YGGL各表进行插入、修改、删除操作的存储过程,然后,编写l段程序调用这些存储过程。
(3)对于YGGL数据库,表Employees的EmployeelD列与表Salary的EmployeelD列应满足参照完整性规则,请用触发器实现两个表问的参照完整性。
4.创建触发器
对于YGGL数据库,表Employees的DepartmentID列与表Departments的DepartmentID列对应满足参照完整性
规则,即:
(1)向Employees表添加1条记录时,该记录的DepartmentID值在Departments表中应存在。
(2)修改Departments表DepartmentID 字段值时,该字段在Employees表中的对应值也应修改。
(3)删除Departments表中1条记录时,该记录DepartmentID字段值在Employees表中对应的记录也应删除。
对于上述参照完整性规则,在此通过触发器实现。
在查询分析器编辑窗口输入各触发器的代码并执行:
①向Employees表插入或修改1条记录时,通过触发器检查记录的DepartmentID值在Departments表是否
存在,若不存在,则取消插入或修改操作。
USE YGGL
GO
CREATE TRIGGER EmployeesIns on dbo.Employees
FOR INSRET
AS
BEGIN
IF((SELECT ins.departmentid from inserted ins)NOT IN
(SELECT departmentid FROM departments))
ROLLBACK
/*对当前事务回滚,即恢复到插入前的状态
END
②修改Departments表departmentID字段值时,该字段在Employees表中的对应值也进行相应修改。
USE YGGL
GO
CREATE TRIGGER DepartmentsUpdate on dbo.Departments
FoR UPDATE
AS
BEGIN
IF(COLUMNS_UPDATED()&01)>0
UPDATE Employees
SET DepartmentlD=(SELECT ins.DepartmentlD from INSERTED ins)
WHERE DepaxtmentlD=(SELECT DepartmentlD FROM deleted)
END
GO
③删除Departments表中1条记录的同时删除该记录departmentlD字段值在Employees表中对应的记录。
USE YGGL
GO
CREATE TRIGGER DepartmentsDelete On db.Departments
FOR DELETE
AS
BEGIN
DELETE FROM Employees
WHERE DepartmentlD=(SELECT DepartmentlD FROM deleted)
END
GO
【思考与练习】
上述触发器的功能用完整性的方法完成。
【思考与练习】
编写如下T-SQL程序:
(1)自定义1个数据类型,用于描述YGGL数据库中的DepartmentlD字段,然后编写代码重新定义数据库各表。
(2)对于YGGL数据库,表Employees的EmployeelD列与表Salary的EmployeelD列应满足参照完整性规则,请用触发器实现两个表间的参照完整性。
(3)。