一篇文章带你深入了解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 07 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
一文弄懂MySQL索引创建原则
Feb 28 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
Apr 20 MySQL
mysql 子查询的使用
Apr 28 MySQL
Mysql中常用的join连接方式
May 11 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 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 搜索框提示(自动完成)实例代码
2012/02/05 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
jQuery使用手册之一
2007/03/24 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
python中的闭包用法实例详解
2015/05/05 Python
Python中的super()方法使用简介
2015/08/14 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
技术总监的工作职责
2013/11/13 职场文书
亲属关系公证书
2014/04/08 职场文书
学校火灾防控方案
2014/06/09 职场文书
三严三实对照检查材料
2014/09/22 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
《月光曲》教学反思
2016/02/16 职场文书
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技