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

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

一、实验目的
1、掌握存储过程创建和调用的方法;
2、掌握MySQL中程序片段的组成;
3、掌握触发器的使用方法。
二、实验环境
硬件:PC机
软件:Linux操作系统、MySQL Server 6.0
三、实验内容和步骤
1、存储过程:
(1)创建存储过程,使用student表中的学生人数来初始化一个局部变量,并调用这个存储过程;
MySQL实验五:触发器、存储过程操作实验_第1张图片
MySQL实验五:触发器、存储过程操作实验_第2张图片
(2)创建存储过程,比较两学生的年龄,若前者比后者大就输出0,否则输出1。
MySQL实验五:触发器、存储过程操作实验_第3张图片
调用时发现报错,原因是源代码中定义的Sno2学号长度不够,
在这里插入图片描述
因为之前输入数据表中所有学生的学号都是10位,而源代码第二行此处定义为in Sno2 varchar(9);从以下结果可见若输入第二名学生的学号为9位是可以正常运行的,但却不能满足我们需要进行比较的要求。
MySQL实验五:触发器、存储过程操作实验_第4张图片
可以将COMPA删除后重新定义。
MySQL实验五:触发器、存储过程操作实验_第5张图片
运行成功,比较得到结果。
MySQL实验五:触发器、存储过程操作实验_第6张图片
2、触发器:
(1)创建触发器,在student表中删除学生信息的同时将sc表中该学生的选课信息删除,以确保数据的完整性;
MySQL实验五:触发器、存储过程操作实验_第7张图片
删除student表中的一行数据,然后查看sc表的变化:
MySQL实验五:触发器、存储过程操作实验_第8张图片
MySQL实验五:触发器、存储过程操作实验_第9张图片
与原本的sc表(上图)对比,可见当前sc表(下图)中学号为3116003043的学生对应的数据也删除了。

(2)假设student1表和student表的结构和内容都相同,在student1上创建一个触发器,如果添加一个学生的信息,该课程也会被添加到student表中。
MySQL实验五:触发器、存储过程操作实验_第10张图片
向student表中添加一条新信息(‘2008006’,‘杨过’,‘男’,19,‘IS’) :观察student1表的变化;
在这里插入图片描述
直接添加信息出现报错,原因是student1不存在,需要创建表student1;
MySQL实验五:触发器、存储过程操作实验_第11张图片
Student1创建成功,但此时插入信息仍有报错。因为有中文输入,所以还要更改student1和在student1出现中文的列(姓名Sname、性别Sage)的编码格式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时插入成功。对比student1和student表,出现了相同的学生信息。
在这里插入图片描述
MySQL实验五:触发器、存储过程操作实验_第12张图片
(3)定义一个BEFORE行级触发器,为teacher表定义完整性规则,“向teacher插入教授的信息时,工资不得低于4000元,如果低于4000元,则自动将其更改为4000元”。

先定义teacher表,修改表、列编码格式为utf8,将教师信息输入teacher表中。
MySQL实验五:触发器、存储过程操作实验_第13张图片
MySQL实验五:触发器、存储过程操作实验_第14张图片
定义before行级触发器,为teacher表定义完整性规则。由于if语句中需要出现分号,所以需要先设置sql语句结束符不为分号,比如可以设置为$$。
MySQL实验五:触发器、存储过程操作实验_第15张图片
向teacher表中添加一条新信息(‘10007’,’罗陵’,’女’,’教授’,3500),令其工资低于4000,观察结果。
MySQL实验五:触发器、存储过程操作实验_第16张图片
(4)删除teacher表上的触发器teacher_Income。
在这里插入图片描述

你可能感兴趣的:(mysql,数据库,sql)