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中InnoDB存储引擎的锁的基本使用教程
May 26 MySQL
MySQL 时间类型的选择
Jun 05 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
MySql中的json_extract函数处理json字段详情
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
PHP处理会话函数大总结
2015/08/05 PHP
php制作简单模版引擎
2016/04/07 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
jQuery的一些注意
2006/12/06 Javascript
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python版简单工厂模式
2017/10/16 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python+pygame实现坦克大战
2019/09/10 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
员工考核管理制度
2014/02/02 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
推普周活动总结
2014/08/28 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
父亲节寄语大全
2015/02/27 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
详解redis在微服务领域的贡献
2021/10/16 Redis
讨论nginx location 顺序问题
2022/05/30 Servers