一篇文章带你深入了解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 sql_mode修改不生效的原因及解决
May 07 MySQL
详解mysql三值逻辑与NULL
May 19 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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
jquery $.ajax入门应用二
2008/11/19 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
python 实现多维数组转向量
2019/11/30 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
python实现滑雪游戏
2020/02/22 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
python实现学生成绩测评系统
2020/06/22 Python
python中entry用法讲解
2020/12/04 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
高三自我鉴定范文
2013/10/19 职场文书
汽车检测与维修专业求职信
2013/10/30 职场文书
高中数学教师求职信
2013/10/30 职场文书
商场消防管理制度
2014/01/12 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
可口可乐广告词
2014/03/20 职场文书
实名检举信范文
2015/03/02 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript