触发器例题

294 阅读1分钟

例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’