一篇文章带你深入了解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 06 MySQL
MySQL数字类型自增的坑
May 07 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
mysql自增长id用完了该怎么办
Feb 12 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
mysql5.5中文乱码问题解决的有用方法
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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
javascript事件模型代码
2007/07/01 Javascript
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
HTML5实现留言和回复页面样式
2015/07/22 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
AJax面试题
2014/11/25 面试题
大学生自我鉴定
2013/12/08 职场文书
学生周末长期请假条
2014/02/15 职场文书
平面设计求职信
2014/03/10 职场文书
货车司机岗位职责
2014/03/18 职场文书
《菜园里》教学反思
2014/04/17 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
六查六看剖析材料
2014/10/06 职场文书
个人总结格式范文
2015/03/09 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
新娘婚礼答谢词
2015/09/29 职场文书