一篇文章带你深入了解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
超详细教你怎么升级Mysql的版本
May 19 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
MySQL query_cache_type 参数与使用详解
Jul 01 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
mysql事务隔离级别详情
Oct 24 MySQL
mysql函数全面总结
Nov 11 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
MySQL数据库查询之多表查询总结
Aug 05 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 信息采集程序代码
2009/03/17 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
python 决策树算法的实现
2020/10/09 Python
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
京剧自荐信
2014/01/26 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
求职自我评价参考范文
2019/05/16 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android