一篇文章带你深入了解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中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MyBatis 动态SQL全面详解
Oct 05 MySQL
MySQL日期时间函数知识汇总
Mar 17 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
优化Mysql查询的示例
Apr 26 MySQL
Mysql中的触发器定义及语法介绍
Jun 25 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
jquery创建div 实现代码
2009/04/27 Javascript
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python 切片和range()用法说明
2013/03/24 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
浅析NumPy 切片和索引
2020/09/02 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
学生喝酒检讨书
2014/02/06 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
天那边观后感
2015/06/09 职场文书
教师见习总结范文
2015/06/23 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书