一篇文章带你深入了解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 07 MySQL
linux下导入、导出mysql数据库命令的实现方法
May 26 MySQL
正确使用MySQL update语句
May 26 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 MySQL
数据设计之权限的实现
Aug 05 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 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
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
Python实现批量下载文件
2015/05/17 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
Python 互换字典的键值对实例
2019/02/12 Python
python调试神器PySnooper的使用
2019/07/03 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
高二生物教学反思
2014/01/27 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
计算机毕业生求职信
2014/06/10 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
暑假生活随笔
2015/08/15 职场文书
python实现MD5进行文件去重的示例代码
2021/07/09 Python
Oracle 触发器trigger使用案例
2022/02/24 Oracle
nginx 配置缓存
2022/05/11 Servers