一篇文章带你深入了解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知识点整理
Apr 05 MySQL
left join、inner join、right join的区别
Apr 05 MySQL
如何使用Maxwell实时同步mysql数据
Apr 08 MySQL
MySQL Router的安装部署
Apr 24 MySQL
MySQL优化之如何写出高质量sql语句
May 17 MySQL
MySQL索引失效的典型案例
Jun 05 MySQL
MySQL约束超详解
Sep 04 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
以MySQL5.7为例了解一下执行计划
Apr 13 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 MySQL
MySQL慢查询中的commit慢和binlog中慢事务的区别
Jun 16 MySQL
MySQL索引失效十种场景与优化方案
May 08 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
Array of country list in PHP with Zend Framework
2011/10/17 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
禁止你的左键复制实用技巧
2013/01/04 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
Python3读取文件常用方法实例分析
2015/05/22 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
python3实现简单飞机大战
2020/11/29 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
一名老师的自我评价
2014/02/07 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
班子四风对照检查材料
2014/08/21 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
个人四风对照检查材料
2014/09/26 职场文书
留学推荐信怎么写
2015/03/26 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
安全生产感想
2015/08/07 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript