触发器语法格式:
-- 增加村民记录的触发器DROP TRIGGER if EXISTS `insert_villager`;DELIMITER $CREATE TRIGGER `insert_villager`BEFORE INSERTON `villager`FOR EACH ROWBEGIN-- 根据出生年月日计算村民年龄SET new.villager_age = DATEDIFF(NOW(),new.villager_birthday)/365;-- 村民所在的家庭人口数+1UPDATE `family` SET people_amount = people_amount + 1WHERE `family`.`F_ID` = new.`FK_FID`;END $DELIMITER;
drop TRIGGER if EXISTS `tri_returnbook`;delimiter //create TRIGGER `tri_returnbook`after deleteon `Loan`for each rowBegindeclare _ISBN char(13);declare _loanNo varchar(16);insert into LoanHist(loanNo,bookNo,borrowDate,returnDate) value(old.loanNo,old.bookNo,old.borrowDate,now());SELECT r.ISBN,r.loanNo into _ISBN,_loanNofrom Reservation as r,Books as bwhere r.ISBN = b.ISBN and b.bookNo = old.bookNoorder by r.reservationDatelimit 0,1;if(_ISBN is null) thenupdate Books set bstatus = 0where bookNo = old.bookNo;elseupdate Reservation set rstatus = 'T'where ISBN = _ISBN and loanNo = _loanNo;update Books set bstatus = 3where bookNo = old.bookNo;end if;end//delimiter ;
