6.在borrow表创建名为“t_after_update_borrow”的触发器,要求在更新borrow表的数据之后—— 如果该记录更新前rdate字段是null,更新之后为not null,并且更新前后bno没有变化,那么设置book表中bno与borrow表更新后bno字段相同的记录的可用数量available的值,让它的值增加1。 如果该记录更新前后rdate字段都是null,并且更新前后bno有变化,那么设置book表中bno与borrow表更新前bno字段相同并且available小于number的记录的可用数量available的值,让它的值增加1;另外还要设置book表中bno与borrow表更新后bno字段相同的记录的可用数量available的值,让它的值减少1。 book表字段有bno,bname,number,available borrow表字段有bno,rdate
时间: 2023-07-28 13:12:38 浏览: 93
以下是创建名为“t_after_update_borrow”的触发器的SQL语句:
```
CREATE TRIGGER t_after_update_borrow
AFTER UPDATE ON borrow
FOR EACH ROW
BEGIN
DECLARE old_bno INT;
DECLARE new_bno INT;
-- 获取更新前后的bno字段值
SET old_bno = OLD.bno;
SET new_bno = NEW.bno;
-- 如果rdate字段从null变成了not null,且bno没有变化
IF OLD.rdate IS NULL AND NEW.rdate IS NOT NULL AND old_bno = new_bno THEN
UPDATE book SET available = available + 1 WHERE bno = new_bno;
END IF;
-- 如果rdate字段从null变成了not null,且bno有变化
IF OLD.rdate IS NULL AND NEW.rdate IS NOT NULL AND old_bno != new_bno THEN
UPDATE book SET available = available + 1 WHERE bno = old_bno AND available < number;
UPDATE book SET available = available - 1 WHERE bno = new_bno;
END IF;
END;
```
这个触发器在borrow表中的每个更新操作之后都会被触发。首先,它获取更新前后的bno字段值。然后,如果rdate字段从null变成了not null,且bno没有变化,它会将book表中bno与borrow表更新后bno字段相同的记录的可用数量available的值增加1。如果rdate字段从null变成了not null,且bno有变化,它会将book表中bno与borrow表更新前bno字段相同并且available小于number的记录的可用数量available的值增加1,同时将book表中bno与borrow表更新后bno字段相同的记录的可用数量available的值减少1。
阅读全文