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 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
MySQL 分组查询的优化方法
May 12 MySQL
MySQL如何构建数据表索引
May 13 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
SQL实现LeetCode(178.分数排行)
Aug 04 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
mysql的Buffer Pool存储及原理
Apr 02 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
编译问题
2006/10/09 PHP
php URL编码解码函数代码
2009/03/10 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
CI框架常用方法小结
2016/05/17 PHP
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
AngularJS入门之动画
2016/07/27 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
python 实现插入排序算法
2012/06/05 Python
jupyter安装小结
2016/03/13 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
python 获取图片分辨率的方法
2019/01/08 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
python tkinter模块的简单使用
2021/04/07 Python
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
TS 类型兼容教程示例详解
2022/09/23 Javascript