触发器实验

本文介绍了在图书管理数据库中创建的tri_returnbook触发器,用于处理还书操作,删除借阅记录,更新历史记录,检查并调整图书预约状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请注意保持“命令行”连接状态,为后续查询保持数据库资源。

前面的任务中,我们已经完成了library数据库和表的创建。并且导入了数据。 在本实训中,在图书管理数据库中创建一系列 触发器,用以强化用户在借书、还书、预约图书等主要图书管理的业务处理规则,从而保证数据库的完整性。本任务中表结构如下:

任务描述
  1. 创建一个触发器tri_returnbook,当一本书被还回时,从LOAN表中删除相应的借阅记录,将该学生借阅这本书记录添加到LoadHist表中;并检查是否有用户在等待预约这本书:如有则将这本书的借阅状况修改为 已经预约,并按照预约的日期先后,将最先预约的预约状态改为T;如果没有人预约,则应该将此书的借阅状况修改为“可以借阅且尚未借出”(修改状态字段值)
    /*  1.	创建一个触发器tri_returnbook,当一本书被还回时,从LOAN表中删除相应的借阅记录,
    将该学生借阅这本书记录添加到LoadHist表中;并检查是否有用户在等待预约这本书:
    如有则将这本书的借阅状况修改为 已经预约,并按照预约的日期先后,将最先预约的预约状态改为T;
    如果没有人预约,则应该将此书的借阅状况修改为“可以借阅且尚未借出”(修改状态字段值)*/
    
    
    use library;
    drop TRIGGER if EXISTS tri_returnbook;
    delimiter //
     
    ######### Begin #########
    create  trigger tri_returnbook
    after delete on Loan 
    for each row
    Begin
    declare a int;
    declare b char(13);
    insert into LoanHist(loanNo,bookNo,borrowDate,returnDate)
    values (old.loanNo,old.bookNo,old.borrowDate,now());
    select count(loanNo)into a
     from Books B join Reservation R  on B.ISBN=R.ISBN  WHERE old.bookNo=B.bookNo;
     if(a = 0)
      then update Books set bstatus = "0" where old.bookNo=Books.bookNo;
      end if;
      if(a!=0)
      then select ISBN into b
      from Books B where old.bookNo=B.bookNo;
      update Books set bstatus = "3" where old.bookNo=Books.bookNo;
      update Reservation set rstatus = "T" where ISBN=b;
      END if;
      END//
    
    
    
    ######## End #########
     
    delimiter ;
     
     SELECT EVENT_MANIPULATION,EVENT_OBJECT_TABLE,ACTION_ORDER,ACTION_ORIENTATION,ACTION_TIMING 
    from information_schema.TRIGGERS
    where TRIGGER_NAME='tri_returnbook';
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小珠佩奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值