一篇文章带你深入了解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性能压力基准测试工具sysbench的使用简介
Apr 21 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
MySQL 如何设计统计数据表
Jun 15 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MySQL系列之九 mysql查询缓存及索引
Jul 02 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
MYSQL 表的全面总结
Nov 11 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 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中一个完整表单处理实现代码
2011/11/10 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
js模拟实现Array的sort方法
2007/12/11 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
python 实现return返回多个值
2019/11/19 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
培训演讲稿范文
2014/01/12 职场文书
团代会主持词
2014/04/02 职场文书
应聘会计求职信
2014/06/11 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
二审答辩状格式
2015/05/22 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
使用MybatisPlus打印sql语句
2022/04/22 SQL Server