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

本文是关于MySQL数据库的实验,重点探讨存储过程的创建与调用,以及触发器的应用。实验中,通过实例展示了如何创建存储过程进行学生年龄比较,以及如何利用触发器确保数据完整性,如在删除学生信息时同步删除选课记录。同时,还介绍了如何在添加新学生信息时触发数据同步,并设置BEFORE行级触发器维护教师工资的最低标准。

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

一、实验目的
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。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值