在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 18:12:38 浏览: 95
在 MySQL 中,可以通过以下 SQL 语句创建名为“t_after_update_borrow”的触发器:
```
CREATE TRIGGER t_after_update_borrow AFTER UPDATE ON borrow
FOR EACH ROW
BEGIN
DECLARE old_rdate DATE;
DECLARE new_rdate DATE;
DECLARE old_bno VARCHAR(20);
DECLARE new_bno VARCHAR(20);
SET old_rdate = OLD.rdate;
SET new_rdate = NEW.rdate;
SET old_bno = OLD.bno;
SET new_bno = NEW.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;
IF old_rdate IS NULL AND new_rdate IS 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;
```
该触发器分别对两种情况进行了判断和处理:
1. 如果更新前rdate字段是null,更新之后为not null,并且更新前后bno没有变化,那么设置book表中bno与borrow表更新后bno字段相同的记录的可用数量available的值,让它的值增加1。
2. 如果更新前后rdate字段都是null,并且更新前后bno有变化,那么设置book表中bno与borrow表更新前bno字段相同并且available小于number的记录的可用数量available的值,让它的值增加1;同时设置book表中bno与borrow表更新后bno字段相同的记录的可用数量available的值,让它的值减少1。
需要注意的是,在触发器中使用了OLD和NEW关键字来获取更新前后的数据。同时,使用了IF语句进行判断,并在满足条件时更新book表中的数据。
阅读全文