您的当前位置:首页正文

mysql 触发器 条件_MySQL触发器-条件触发器语法

2024-11-29 来源:个人技术集锦

文章为作者原创,未经许可,禁止转载。    -Sun Yat-sen University 冯兴伟

实验4 触发器

(1)实验目的

掌握数据库触发器的设计和使用方法

(2)实验内容和要求

定义BEFORE触发器和AFTER触发器。能够理解不同类型触发器的作用和执行原理,验证触发器的有效性。

(3)实验重点和难点

实验重点:触发器的定义。

实验难点:利用触发器实现较为复杂的用户自定义完整性。

此次实验还是延用理论课本中出现的大学数据库作为实验例子。

(1).AFTER触发器

i.  在takes表上定义一个UPDATE触发器,当takes表中元组的属性grade被更新时,意味着学生上的这么课的课程成绩被更新,需要用触发器维护student里元组的tot_cred属性,使其获得的总学分保持实时更新。只有当属性grade从空值或者’F’被更新为代表课程已经完成的具体分数时,触发器才会被激发。

delimiter

create trigger credit_get after update

on takes for each row

begin

if (NEW.grade <> 'F' and NEW.grade is not null

and (OLD.grade = 'F' or OLD.grade is null))

then

update student

set tot_cred = tot_cred +

(select credits

from course

where course.course_id = NEW.course_id)

where student.ID = NEW.ID;

end if;

end;

ii.  在section表上定义一个INSERT触发器,当对课程section表执行任何插入操作后触发器被启动,以确保插入元组的time_slot_id属性即上课时间段是合法的,受time_slot表的time_slot_id约束,检查插入时的参照完整性。

delimiter

create trigger timeslot_check1 after insert

on section for each row

begin

if(NEW.time_slot_id not in

(select time_slot_id

from time_slot))

then

delete from section

where time_slot_id = NEW.time_slot_id;

end if;

显示全文