【SQL】基础实验6——存储过程和触发器的使用

 

一、实验目的

1、掌握存储过程的创建、执行、修改和删除操作

2、掌握触发器的创建、修改和删除操作

二、实验内容、方法、步骤和实验结果与分析【结果情况,碰到什么问题,如何解决的?】

(一)存储过程:

完成下列各题功能,保存或记录实现各题功能的Transact-SQL语句。

1.在数据库HrSystem 中创建存储过程avg_wage,用于求所有员工的平均工资,并通过输出参数返回该平均工资。要求在创建存储过程之前首先判断该存储过程是否已经存在,如果存在,则将其删除。

方法:

USE HrSystem

GO

/*判断表sysobjects中是否存在列名为“avg_wage”且类型为“P”(存储过程)的列*/

IF EXISTS(SELECT name FROM sysobjects WHERE name='avg_wage' AND type='P')

   DROP PROCEDUREavg_wage

GO

/*创建存储过程*/

CREATE PROCEDURE avg_wage

@avgwage float=0 output

AS

SELECT @avgwage=AVG(wage) FROM Employees

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第1张图片

分析:创建存储使用PROCEDURE关键字,存储结构有带参数和不带参数之分。

 

2.执行第1题创建的存储过程avg_wage,打印员工平均工资。

方法:

USE HrSystem

GO

DECLARE @avgwage float

EXEC avg_wage@avgwage output

print @avgwage

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第2张图片

分析:创建好存储结构后,还需要执行语句,才能够调用该存储结构,并该指明输入输出变量。

 

3.在数据库HrSystem中创建存储过程max_wage,根据指定的部门名称(输出参数)返回该部门的最高工资(输出参数)。要求在创建存储过程之前要首先判断该存储过程是否已经存在,如果存在,则将其删除。

方法:

USE HrSystem

GO

IF EXISTS(SELECT name FROM sysobjects WHERE name='max_wage' AND TYPE='P')

   DROP PROCEDUREmax_wage

GO

CREATE PROCEDURE max_wage

@maxwage float output,

@depname char(20) output

AS

SELECT @maxwage=max(e.Wage),@depname=d.Dep_name FROM Employees e,Departments d

WHERE (d.Dep_id=e.Dep_id)

GROUP BY D.Dep_name

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第3张图片

分析:创建存储过程,语句必须是该语句批次中的第一句。

 

4.执行第3题创建的存储过程max_wage,指定部门为“财务部”,打印该类部门的最高工资。

方法:

USE HrSystem

GO

DECLARE @maxwage float,@depname char(20)

EXEC max_wage@maxwage output,@depname output

print @maxwage

print @depname

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第4张图片

分析:PRINT关键字用于提示信息或结果信息的显示输出。

 

5.删除存储过程avg_wage和max_wage。

方法:

USE HrSystem

GO

DROP PROCEDURE avg_wage,max_wage

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第5张图片

分析:删除存储结构与删除数据库、表、视图等过程一样,都是使用DROP关键字。

 

(二)触发器:

创建一个“学生信息”数据库,包含“学生基本信息”表、“专业”表和“系”表,各表包含的字段如下。

·“学生基本信息”表:学号;姓名;性别;班级;出生日期;专业编号。

·“系”表:系编号;系名称;系简介。

·“系”表:系编号;系名称;系简介。

各字段类型按其实际含义自行定义,输入一些数据,要求数据要有代表性。

以下操作要求全部在SQL Server Management Studio中完成,保存或记录实现各题功能的

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第6张图片

 

Transcat-SQL语句(包括测试相应触发器是否生效的相关语句及测试结果)。

1.在“专业”表上创建一个INSERT触发器“TRG1",当发生插入专业表操作时,将显示插人的记录。

方法:

USE学生信息

GO

/*判断表sysobjects中是否存在列名为“TRG1”且类型为“TR”(触发器)的列*/

IF EXISTS(SELECT name FROM sysobjects WHERE name='TRG1' AND type='TR')

   DROP TRIGGERTRG1

GO

CREATE TRIGGER TRG1 ON 专业

FOR INSERT

AS

SELECT * FROMinserted

GO

/*插入数据,检验TRG1是否会被触发*/

USE学生信息

GO

INSERT INTO 专业 VALUES(6,'电子信息工程',6)

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第7张图片

分析:创建触发器同创建存储过程一样,必须是该语句批次中的第一句。

 

2.在“专业”表上创建一个DELETE触发器“TRG2",当发生删除操作时,将给出警告、列出删除的记录并撒销删除。

方法:

USE学生信息

GO

/*判断表sysobjects中是否存在列名为“TRG1”且类型为“TR”(触发器)的列*/

IF EXISTS(SELECT name FROM sysobjects WHERE name='TRG2' AND type='TR')

   DROP TRIGGERTRG2

GO

CREATE TRIGGER TRG2 ON 专业

FOR DELETE

AS

PRINT('专业表中的数据不允许删除')

SELECT * FROMdeleted

ROLLBACK TRANSACTION

GO

/*删除信息,检验触发器是否创建成功*/

DELETE FROM 专业 WHERE专业编号=1

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第8张图片

分析:创建好触发器后,需要相应的测试语句检测。

 

3.在“专业”表上创建一个UPDTAE触发器“TRG3",当发生更新“专业名称”字段的操作时,给出警告并撤销更新。

方法:

USE学生信息

GO

IF EXISTS(SELECT name FROM sysobjects WHERE name='TRG3' AND type='TR')

   DROP TRIGGERTRG3

GO

CREATE TRIGGER TRG3 ON 专业

FOR update

AS

IF UPDATE (专业名称)

BEGIN

   PRINT('专业表中专业名称不允许更改')

   ROLLBACK TRANSACTION

END

GO

/*测试语句*/

UPDATE专业 SET专业名称='专业名称'WHERE专业编号=1

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第9张图片

分析:创建触发器,IF UPDATE语句用于判断指定值是否发生变化。

 

4、在“学生基本信息”表上创建个更新触发器"TRG4",当发生更新“学号”或“姓名”字段的操作时给出警告,并撤销更新。

方法:

USE学生信息

GO

IF EXISTS(SELECT name FROM sysobjects WHERE name='TRG4' AND type='TR')

   DROP TRIGGERTRG4

GO

CREATE TRIGGER TRG4 ON 学生基本信息

FOR UPDATE

AS

IF UPDATE(学号) ORUPDATE(姓名)

BEGIN

   PRINT('学号和姓名不允许修改')

   ROLLBACK TRANSACTION

END

GO

/*测试语句*/

UPDATE学生基本信息 SET学号='12345678901' WHERE 学号='2002090164'

UPDATE学生基本信息 SET姓名='小明' WHERE姓名='李小华'

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第10张图片

分析:创建触发器,ROLLBACK TRANSACTION语句用于回滚不允许发生的事务。

 

5. 删除以上各题创建的所有触发器。

(做好“学生信息”数据库的备份,以备第10章、第11章上机操作时使用。)

方法:

USE学生信息

GO

DROP TRIGGER TRG1

DROP TRIGGER TRG2

DROP TRIGGER TRG3

DROP TRIGGER TRG4

GO

步骤及结果:

【SQL】基础实验6——存储过程和触发器的使用_第11张图片

 

三、实验小结【对自己而言,通过实验学到的关键技术方法】

 1、存储过程由参数、编程语句和返回值组成;分为:带参数和不带参数的两种;

2、使用存储过程有:允许模块化程序设计、允许更快执行、减少网络流量和可作为安全机制使用等优势;

3、可以子啊存储过程中使用RETURN语句返回一个状态值,但返回值只能是整数;

4、触发器是一种特殊类型的存储过程,它再指定的表发生变化时被触动,从而自动生效;

5、ROLLBACKTRANSACTION语句用于回滚事务;

6、删除存储过程以及触发器均用DROP关键字。

 

智者乐水,仁者乐山,幸福之人关注理工科日记

获取原文文档请关注“理工科日记”,回复数据库获取。

你可能感兴趣的:(SQL数据库基础实验,数据库,mysql,java,触发器)