SQL图书馆系统数据库触发器代码

2022-04-23 游戏 140阅读
1、---------------这是分割线--------------------------
CreateTriggertg_借书触发器名on[借阅记录]ForInsert
as
update[借阅记录]set[借阅记录].借书日期=getdate(),[借阅记录].应还日期=getdate()+[读者].可借天数

from[借阅记录]innerjoin[读者]on[借阅记录].读者卡号=[读者].读者卡号

where[借阅记录]in(SELECT[借阅记录]FROMINSERTED)

update[图书]set[图书].在库数量=[图书].在库数量-1
where[图书].图书号in(select图书号fromInserted)

update[读者]set[读者].可错数量=[读者].可错数量-1
where[读者].读者卡号in(select读者卡号fromInserted)

2、--------------------这是分割线--------------------------------
createtriggertg_还书触发器名on[借阅记录]ForUpdate
as
update[图书]set[图书].在库数量=[图书].在库数量+1
where[图书].图书号in(select图书号fromDeleted)

update[读者]set[读者].可错数量=[读者].可错数量+1
where[读者].读者卡号in(select读者卡号fromDeleted)
--超期时插入到超期记录表

if(select1fromDeletedwhere应还日期
begin
--insertinto超期记录表(编号,读者卡号,超期天数,超期金额)values(…………)

-----题目中没给出超期金额算法,编号应该是自动不应该手动插入。
end

3、---------这是分割线--------------------
createtriggertr_插入读者触发器名on[读者]ForInsert
as
if(select1fromInsertedwhere类型='学生')

begin
update[读者]set可借天数=30where读者卡号in(select读者卡号fromInserted)

end
else
begin
update[读者]set可借天数=60where读者卡号in(select读者卡号fromInserted)
end

注释:触发器语句中使用了两种特殊的表:deleted表和inserted表。
Deleted表用于存储DELETE和UPDATE语句所影响的行的复本。在执行DELETE或UPDATE语句时,行从触发器表中删除,并传输到deleted表中。Deleted表和触发器表通常没有相同的行。
Inserted表用于存储INSERT和UPDATE语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到inserted表和触发器表中。Inserted表中的行是触发器表中新行的副本。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com