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 Show Profile
Apr 05 MySQL
Mysql MVCC机制原理详解
Apr 20 MySQL
详解MySQL中的主键与事务
May 27 MySQL
MySQL GRANT用户授权的实现
Jun 18 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
MySQL如何修改字段类型和字段长度
Jun 10 MySQL
MySQL慢查询中的commit慢和binlog中慢事务的区别
Jun 16 MySQL
MySQL新手入门进阶语句汇总
Sep 23 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 MySQL
详解MySQL的内连接和外连接
May 08 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
PHP时间和日期函数详解
2015/05/08 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
如何写好升职自荐信
2014/01/06 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
酒店前台岗位职责
2015/04/16 职场文书
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技