MySQL数据库实验之 触发器和存储过程


Posted in MySQL onJune 21, 2022

观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考。

一、实验目的

  • 1、掌握某主流DBMS支持的SQL编程语言和编程规范,规范设计存储过程;
  • 2、能够理解不同类型触发器的作用和执行原理,验证触发器的有效性;
  • 3、培养学生的系统思维,提升解决复杂工程问题所需的编程能力。

二、实验要求

掌握某主流DBMS的SQL编程语言,在前面创建的数据库基础上,定义BEFORE(for)触发器和AFTER触发器;掌握数据库存储过程定义、存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。

温馨提示:以下内容均已经过测试,不过难免会有疏漏,但是代码实现大多数思路及实现经测验都是正确的。

三、实现内容及步骤

1、创建一个不带参数的简单存储过程

  • (1)创建存储过程sp_avggrade,实现查询每门课程学生的平均成绩的功能;
delimiter//
CREATE PROCEDURE sp_avggrade()
COMMENT '查询每门课程学生的平均成绩的功能'
BEGIN
SELECT cno as 课程号,avg(grade)as 平均成绩
FROM sc
GROUP BY cno;
end//
delimiter;

(2)调用该存储过程,实现查询。

call sp_avggrade();

2、创建一个带输入参数的存储过程

(1)创建存储过程sp_course_avggrade, 实现通过输入课程编号参数查询指定课程编号的课程平均成绩的功能;

delimiter//
CREATE PROCEDURE sp_course_avggrade(IN c_no CHAR(2))
COMMENT '通过输入课程编号参数查询指定课程编号的课程平均成绩的功能'
BEGIN
SELECT cno,AVG(grade)
FROM sc
WHERE cno=c_no;
END//
delimiter;

(2)调用该存储过程,获取指定课程的平均成绩。

3、创建一个带输入输出参数的存储过程

(1)创建存储过程sp_sdept _student,实现根据用户输入的院系编号参数,查找该学院的学生人数,并以变量形式输出的功能;

delimiter//
CREATE PROCEDURE sp_sdept_student2(IN _sdept CHAR(10),OUT num int)
BEGIN
SELECT COUNT(sno) INTO num
FROM student
WHERE _sdept = sdept;
END//
delimiter;

(2)调用该存储过程,以返回变量的形式获取相应院系的学生人数。

SET @num=10;
CALL sp_sdept_student2('计科',@num);
SELECT @num AS '人数';

4、触发器的创建与使用

(1)在学生表上创建触发器,实现学生表中删除学生记录时,成绩表中该学生成绩记录的级联删除;

delimiter//
CREATE TRIGGER delete_stu
BEFORE DELETE
ON student
FOR EACH ROW
BEGIN
DELETE
FROM sc
WHERE sc.sno=old.sno;
END//
delimiter;

(2)在选课表上创建触发器,若录入的成绩大于100分,小于0分,则拒绝插入记录并显示;

delimiter//
CREATE TRIGGER scgrade
BEFORE INSERT ON sc
FOR EACH ROW
BEGIN
IF new.grade>100 or new.grade < 0 THEN
SIGNAL SQLSTATE '45000'
SET message_text='录入成绩不符合规定,拒绝插入';
END IF;
END//
delimiter;

(3)验证(1)、(2)中触发器

验证(1)

DELETE
FROM student
WHERE sno='201513';

验证(2)

INSERT INTO sc(sno,cno,grade)
VALUES('2002720','1',200);

四、实验总结

  • 1、通过本次实验,对存储过程和触发器有了更深的认识;
  • 2、能够理解不同类型触发器的作用和执行原理, 验证了触发器的有效性;
  • 3、熟练掌握了数据库存储过程定义、存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。

到此这篇关于MySQL数据库实验之 触发器和存储过程的文章就介绍到这了,更多相关MySQ存储过程内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

MySQL 相关文章推荐
mysql部分操作
Apr 05 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
Mysql 用户权限管理实现
May 25 MySQL
MySQL GRANT用户授权的实现
Jun 18 MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
MySQL中EXPLAIN语句及用法
May 20 MySQL
MySQL中order by的执行过程
Jun 05 MySQL
MySQL transaction事务安全示例讲解
Jun 21 #MySQL
MySQL详细讲解变量variables的用法
Jun 21 #MySQL
mysql sql常用语句大全
Jun 21 #MySQL
MySQL示例讲解数据库约束以及表的设计
Jun 16 #MySQL
mysql幻读详解实例以及解决办法
Jun 16 #MySQL
mysql数据库隔离级别详解
Jun 16 #MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 #MySQL
You might like
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
打造计数器DIY三步曲(中)
2006/10/09 PHP
PHP define函数的使用说明
2008/08/27 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
php实现简单四则运算器
2020/11/29 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
requireJS使用指南
2016/04/27 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
《Python学习手册》学习总结
2018/01/17 Python
python3.x实现base64加密和解密
2019/03/28 Python
python设置环境变量的作用和实例
2019/07/09 Python
python with (as)语句实例详解
2020/02/04 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
Java如何支持I18N?
2016/10/31 面试题
毕业生在校学习的自我评价分享
2013/10/08 职场文书
合伙购房协议样本
2014/10/06 职场文书
停电放假通知
2015/04/14 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书