例14、使用触发器实现检查约束,在向elective表插入记录时,score字段的值或者为空,或者是在0~100之间。如果score字段的值不满足要求,则将score的值改成在指定范围内。
(触发器创建完成后,请插入一行数据,观察触发器是否触发工作。)
create TRIGGER insert1 BEFORE INSERT on elective FOR EACH ROW
BEGIN
IF new.score is NOT NULL AND new.score<0 THEN
set new.score =0;
ELSEIF new.score is not null and new.score>100 then
set new.score=100;
END IF;
END
insert INTO elective VALUES('10101001','c003','-50');
例15、使用触发器实现检查约束,在对elective表修改记录时,修改的记录score字段的值或者为空,或者是在0~100之间。如果score字段的值不满足要求,则记录不能修改。
(触发器创建完成后,更新score字段的值,观察触发器是否触发工作。)
CREATE TRIGGER tru_in BEFORE UPDATE on elective for EACH ROW
BEGIN
IF new.score IS NOT NULL and new.score NOT BETWEEN 0 and 100 THEN
SET new.score=old.score;
END IF;
END
-- (触发器创建完成后,更新score字段的值,观察触发器是否触发工作。)
UPDATE elective SET score=-25 where sno='10101001' AND cno='c004';
例16、使用触发器实现:当一位老师退休或调离时,将该老师的信息放old_teacher表中。
首先创建old_teacher表:
create table old_teacher
(
no int not null primary key auto_increment,
tname varchar(8) not null,
tgender char(2),
tedu varchar(10),
tpro varchar(10)
);
CREATE TRIGGER tr_retire AFTER DELETE ON teacher for EACH ROW
BEGIN
INSERT INTO old_teacher(tname,tgender,tedu,tpro) VALUES(old.tname,old.tgender,old.tedu,old.tpro);
END
DELETE FROM teacher where tname='万丽';
例17、查看前面elective表上创建的触发器的信息。
SHOW TRIGGERS
Show create trigger tr_in;
Show triggers like ‘elective’