一篇文章带你深入了解Mysql触发器


Posted in MySQL onAugust 02, 2021

基于school数据库中的student, course, sc表,创建满足下述要求的触发器:

数据库navicat cmd界面运行

1.对SC表进行插入或修改时,如果考试成绩不在0-100范围内时,则撤销插入或修改操作。

DELIMITER ;
DROP TRIGGER IF EXISTS `tri_update_grade`;
DELIMITER ;;
CREATE TRIGGER `tri_update_grade` BEFORE UPDATE ON `sc` FOR EACH ROW begin
if new.grade > 100 then
delete from sc;
elseif new.grade < 0 then
delete from sc;
end if;
end
;;
DELIMITER ;
DROP TRIGGER IF EXISTS `tri_insert_grade`;
DELIMITER ;;
CREATE TRIGGER `tri_insert_grade` BEFORE INSERT ON `sc` FOR EACH ROW begin
if new.grade > 100 then
delete from sc;
elseif new.grade < 0 then
delete from sc;
end if;
end
;;

2.对SC表进行插入时,如果学生的选课总学分超过30,则报错并撤销插入。

DELIMITER ;
DROP TRIGGER IF EXISTS `tri_insert_credit`;
DELIMITER ;;
CREATE TRIGGER `tri_insert_credit` BEFORE INSERT ON `sc` FOR EACH ROW begin
SELECT sum(Ccredit) INTO @sumcred from Student join SC on SC.Sno=Student.Sno join Course on Course.Cno=SC.Cno WHERE sc.Sno=new.Sno;
if (@sumcred>30)
then
delete from sc;
end if;
end
;;

3.对SC表进行修改时,不允许修改考试成绩不及格的学生选课记录。

DELIMITER ;
DROP TRIGGER IF EXISTS `tri_grade`;
DELIMITER ;;
CREATE TRIGGER `tri_grade` BEFORE UPDATE ON `sc` FOR EACH ROW begin
select grade INTO @gra from sc where sno=new.sno and sno=new.sno;
if (@gra >= 60)
then
set new.grade=20;
else
delete from sc;
end if;
end
;;

4.对STUDENT表进行插入时,如果年龄为空,则将该生年龄设置为所有学生年龄的平均值。

DELIMITER ;
DROP TRIGGER IF EXISTS `tri_student`;
DELIMITER ;;
CREATE TRIGGER `tri_student` BEFORE INSERT ON `student` FOR EACH ROW begin
select avg(Sage) INTO @avgage from student;
SET @old_age = new.Sage;
if @old_age IS NULL
then
set new.Sage=@avgage;
end if;
end
;;

5.在STUDENT表中增加两列,分别用来存放学生的平均成绩和等级,并对SC表进行插入后,自动维护学生的平均成绩和等级(85-100,等级为“优"; 60-85,等级为“良”,60 以下,等级为“差")

DELIMITER ;
DROP TRIGGER IF EXISTS `tri_comment`;
DELIMITER ;;
CREATE TRIGGER `tri_comment` BEFORE UPDATE ON `student` FOR EACH ROW begin
select avg(Grade) INTO @avggra from sc where sno=new.sno;
if @avggra > 85 then
update sc set new.Savg=@avggra,new.Scomment="you";
else if @avggra > 60 and @avggra <= 85 then
update sc set new.Savg=@avggra,new.Scomment="you";
else
update sc set new.Savg=@avggra,new.Scomment='cha';
end if;
end if;
end
;;
DELIMITER ;

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

MySQL 相关文章推荐
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
MySQL表字段时间设置默认值
May 13 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL 使用索引扫描进行排序
Jun 20 MySQL
mysql联合索引的使用规则
Jun 23 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
MySQL分布式恢复进阶
Jul 23 MySQL
sql注入教程之类型以及提交注入
MySQL子查询中order by不生效问题的解决方法
Aug 02 #MySQL
MySQL中utf8mb4排序规则示例
Aug 02 #MySQL
MySql子查询IN的执行和优化的实现
MySQL里面的子查询的基本使用
Aug 02 #MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 #MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
You might like
PHP实现显示照片exif信息的方法
2014/07/11 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
JS中Location使用详解
2015/05/12 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python实现的HMacMD5加密算法示例
2018/04/03 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
电子商务专业推荐信范文
2013/12/02 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
个人自我鉴定总结
2014/03/25 职场文书
个人校本研修方案
2014/05/26 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
教师个人年度总结
2015/02/11 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书