数据库
首页 > 数据库> > MySQL实验五:触发器、存储过程操作实验

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

作者:互联网

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

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

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

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

标签:触发器,student1,MySQL,存储,实验,student,表中,teacher
来源: https://blog.csdn.net/www2727/article/details/120187934