一篇文章带你深入了解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 13 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
MySQL 数据表操作
May 04 MySQL
MySQL 数据 data 基本操作
May 04 MySQL
MySQL数据库简介与基本操作
May 30 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 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代码
2007/03/03 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
Python自动扫雷实现方法
2015/07/25 Python
python实现反转部分单向链表
2018/09/27 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
python  logging日志打印过程解析
2019/10/22 Python
python之array赋值技巧分享
2019/11/28 Python
django从后台返回html代码的实例
2020/03/11 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
电子商务毕业生求职信
2013/11/10 职场文书
后进生转化工作制度
2014/01/17 职场文书
大学生求职信范文
2014/05/24 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
工伤私了协议书范本
2014/11/24 职场文书
自主招生英文自荐信
2015/03/25 职场文书
新兵入伍决心书
2015/09/22 职场文书
商务信函英语问候语
2015/11/10 职场文书