题目:
读者类型不同:借阅的天数不同,自动计算出还期。假设,读者类型1为借阅45天,读者类型2为借阅180天,读者类型3为借阅720天。
读者编号 | 姓名 | 性别 | 读者类型 |
001 | 张三 | 男 | 1 |
002 | 李四 | 男 | 2 |
003 | 王五 | 女 | 3 |
004 | 赵六 | 女 | 1 |
读者编号 | 图书编号 | 借书日期 | 还书日期 |
001 | 1001 | xxxx | xxxx |
002 | 1001 | xxxx | xxxx |
案例实现:
1.第一步:建表
2.第二步:创建触发器
DROP TRIGGER IF EXISTS insert_borrow;
CREATE TRIGGER insert_borrow
BEFORE
INSERT ON borrowinf
FOR EACH ROW
BEGIN
-- 当前读者
DECLARE thisreader CHAR ( 3 );
DECLARE b_day INT DEFAULT 0;
-- 找读者类型
SELECT `读者类型` INTO thisreader FROM reader WHERE `读者编号`=new.读者编号;
-- 根据读者的类型修改还期
CASE
thisreader
WHEN '1' THEN
SET b_day=45;
WHEN '2' THEN
SET b_day=180;
WHEN '3' THEN
SET b_day=720;
END CASE;
SET new.还期=DATE_ADD(new.借期,INTERVAL b_day DAY);
END;
-- 测试
INSERT INTO borrowinf(读者编号,图书编号,借期) VALUES('001','1004',NOW());
INSERT INTO borrowinf(读者编号,图书编号,借期) VALUES('002','1005',NOW());
INSERT INTO borrowinf(读者编号,图书编号,借期) VALUES('003','1006',NOW());
3.测试的截图
原先borrowinf内的数据
运行后的截图:
4.体会感悟
我创建的是一个触发事件为BEFORE INSERT ON borrowinf的触发器,对new(要插入的)的数据进行了修改,触发器体内部定义了两个变量,一个thisreader记录读者的类型进行case处理,b_day来记录不同类型的读者可以借阅的条数,最后用SET new.还期=DATE_ADD(new.借期,INTERVAL b_day DAY);进行对要插入数据的修改。用到了一个DATE_ADD的函数,第一个参数要修改的变量,第二个参数是要修改的数据,INTERVAL(间隔)是固定的写法,b_day DAY是要加的天数。通过这个例子学到了很多关于触发器的知识并且学到了一个关于日期计算的函数DATE_ADD(exp1,exp2)。