数据库实验报告 下载本文

内容发布更新时间 : 2024/11/13 16:13:58星期一 下面是文章的全部内容请认真阅读。

实验五:触发器、存储过程操作实验

一. 实验目的

1、掌握存储过程创建和调用的方法; 2、掌握MySQL中程序片段的组成; 3、掌握触发器的使用方法。

二 实验环境:本次上机实验所使用的软硬件平台。

硬件:PC 机

软件:Windows xp 操作系统、 MySQL Server 6.0 和 Navicat for MySQL 9.0 三 实验内容和原理:

1、存储过程:

(1)创建存储过程,使用student表中的学生人数来初始化一个局部变量,并调用这个存储过程;

(2)创建存储过程,比较两学生的年龄,若前者比后者大就输出0,否则输出1。 2、触发器:

(1)创建触发器,在student表中删除学生信息的同时将sc表中该学生的选课信息删除,以确保数据的完整性;

(2)假设course1表和course表的结构和内容都相同,在course上创建一个触发器,如果添加一门新的选修课程,该课程也会被添加到

course1表中。

(3)定义一个BEFORE行级触发器,为teacher表定义完整性规则,“向teacher插入教授的信息时,工资不得低于4000元,如果低于4000元,则自动将其更改为4000元”。

(4)删除teacher表上的触发器teacher_Income 。 四 实验步骤:

1、存储过程:

(1)创建存储过程,使用student表中的学生人数来初始化一个局部变量,并调用这个存储过程。

delimiter $$

CREATE PROCEDURE TEST(OUT number1 INTEGER) BEGIN

DECLARE number2 INTEGER;

SET number2=(SELECT COUNT(*) FROM student); SET number1=number2; END $$ Delimiter

调用该存储过程:CALL TEST(@number) 查看结果:SELECT @number

(2)创建存储过程,比较两学生的年龄,若前者比后者大就输出0,否则输

出1:

delimiter $$

CREATE PROCEDURE

COMPA(IN Sno1 varchar(9),IN Sno2 varchar(9),OUT BJ INTEGER) BEGIN

DECLARE SR1,SR2 FLOAT(10);

SELECT Sage INTO SR1 FROM student WHERE Sno=Sno1; SELECT Sage INTO SR2 FROM student WHERE Sno=Sno2; IF Sno1>Sno2 THEN SET BJ=0; ELSE

SET BJ=1; END IF; END $$

delimiter

调用该存储过程:CALL COMPA('2008002','2008003',@BJ); 查看结果:SELECT @BJ

2、触发器:

(1)创建触发器,在student表中删除学生信息的同时将sc表中该学生的选课信息删除,以确保数据的完整性:

CREATE TRIGGER DELETE_SM AFTER DELETE ON student FOR EACH ROW DELETE FROM sc WHERE Sno=OLD.Sno

删除student表中的一行数据,然后查看sc表的变化:

DELETE FROM student