实验五:触发器、存储过程操作实验
一. 实验目的
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