MySQL触发器的创建与管理(实验八)

提示:数据库任然使用xkgl脚本文件.sql
1、创建触发器tr_t1,修改数据时限制学分只能在1~6之间。
代码:

delimiter $$
create trigger tr_t1 before update on course for each row
begin
if (new.credit<1 or new.credit>6) then 
set new.credit = old.credit;
end if;
end;
$$
delimiter ;
select * from course;
update course set credit=9 where CourseID='Dp010001';
update course set credit=5 where CourseID='Dp010002';

结果截图:
MySQL触发器的创建与管理(实验八)_第1张图片

2、创建触发器tr_t2,插入记录到表中,限制教师的性别只能为男或女。
代码:

delimiter $$
create trigger tr_t2 before insert on teacher for each row
begin
if (new.Sex='女' or new.Sex='男') then 
set new.Sex = new.Sex;
else set new.Sex='null';
end if;
end;
$$
delimiter ;
insert into teacher values('dep01006','张三丰','中','1900-04-05','副教授','86684567','东软宿舍21栋100','Dp01');
insert into teacher values('dep01006','张三丰','男','1900-04-05','副教授','86684567','东软宿舍21栋100','Dp01');

结果截图:
MySQL触发器的创建与管理(实验八)_第2张图片

3、创建触发器tr_t3,当删除department表中的某个系信息前,首先删除该系的班级信息。
代码:

delimiter $$
create trigger tr_t3 before delete on department for each row
begin
delete from class where DepartmentID=old.DepartmentID;
end;
$$
delimiter ;
alter table student drop foreign key student_ibfk_1;
alter table teacher drop foreign key teacher_ibfk_1;
delete from department where DepartmentID = 'Dp02';

结果截图:
MySQL触发器的创建与管理(实验八)_第3张图片

【分析与思考】
(1) 触发器相对于存储过程来说,有什么特别之处?
答:触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。
(2) 触发器有哪些类型,before触发器与after触发器有什么区别?
答:有UPDATE、INSERT、DELETE三种类型,before是先检测是否合法,在进行上述的三种操作;after是先进行上述的三种操作,然后再去判断是否符合法;
(3) 在触发体中,old与new分别有什么作用?
答:1、new在before触发器中赋值,取值;在after触发器中取值。
2、new是新插入的数据,old是原来的数据
3、insert只会有new,代表着要插入的新记录
4、delete只会有old,代表着要删除的记录

你可能感兴趣的:(MySQL)