一篇文章带你深入了解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时间设置注意事项的深入总结
May 06 MySQL
教你解决往mysql数据库中存入汉字报错的方法
May 06 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
Mysql 如何实现多张无关联表查询数据并分页
Jun 05 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
Mar 13 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
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
PHP提取中文首字母
2008/04/09 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
原生js制作简单的数字键盘
2015/04/24 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
Vue实现PopupWindow组件详解
2018/04/28 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
介绍Python中几个常用的类方法
2015/04/08 Python
python先序遍历二叉树问题
2017/11/10 Python
python中实现k-means聚类算法详解
2017/11/11 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
传播学专业毕业生自荐信
2013/11/04 职场文书
安全环保演讲稿
2014/08/28 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
新闻通讯稿范文
2015/07/22 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
社区干部培训心得体会
2016/01/06 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
Python 匹配文本并在其上一行追加文本
2022/05/11 Python