① 在学生表Student中定义一个触发器 tri1,保证新添加的学生的年龄(Sage)在16~25岁之间。
DROP TRIGGER if EXISTS tri1; #避免重复出现tri1
delimiter ;; #开始
CREATE TRIGGER tri1 BEFORE INSERT ON student FOR EACH ROW
BEGIN
IF(new.Sage > 25) OR (new.Sage > 16)
THEN
SIGNAL SQLSTATE 'HYOOO' SET message_text = '输入的年龄要在16~25之间';
END IF;
END;;
delimiter; #结束
#调用触发器
insert into Student values('200231001', '王涛', '男', 30, 'IS')
查看触发器:
调用结果:
② 在成绩表SC中定义一个触发器tri2,当修改一个记录时,确保此记录的成绩(Grade)在0~100分之间。
DROP TRIGGER if EXISTS tri2; #避免重复出现tri2
delimiter ;; #开始
CREATE TRIGGER tri2 AFTER UPDATE ON sc FOR EACH ROW
BEGIN
IF(new.grade > 100) OR (new.grade < 0)
THEN
SIGNAL SQLSTATE 'HYOOO' SET message_text = '成绩应在0~100分之间';
END IF;
END;;
delimiter; #结束
#调用触发器
update SC
set Grade=120
where Sno='200215122'
查看触发器:
调用结果:
③ 在学生表Student中创建一个触发器tri3,当删除学生表Student中学生时,自动删除成绩表SC中相应学生的选课记录。
DROP TRIGGER if EXISTS tri3; #避免重复出现tri3
delimiter ;; #开始
CREATE TRIGGER tri3 AFTER DELETE ON student FOR EACH ROW
BEGIN
DELETE FROM sc WHERE sno = old.sno;
END;;
delimiter; #结束
#调用触发器
delete from Student where Sno = '200215122'
查看触发器:
调用结果:
注:删除之后 Student表 和 SC表都没有 ‘200215122’