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

现有如下表:图书(图书号,图书名,图书类型,作者,出版社,出版年份,单价,在库数量)读者(读者卡号,读者姓名,手机号,类型,可借天数,可借数量)借阅记录(读者卡号,图书号... 现有如下表:
图书(图书号,图书名,图书类型,作者,出版社,出版年份,单价,在库数量)
读者(读者卡号,读者姓名,手机号,类型,可借天数,可借数量)
借阅记录(读者卡号,图书号,借书日期,应还日期,还书日期)
超期记录表(编号,读者卡号,超期天数,超期金额)
1、 编写触发器:读者借书,当往借阅记录表添加一条记录时,图书表的在库数量减1,可借数量减1,借书日期为系统当前日期,应还日期为当前日期加上该读者在可借天数

2、 编写触发器:读者还书,当超期时,自动往超期记录表添加一条记录(包含编号,读者卡号,超期天数,超期金额),图书的在库数量加1,可借数量加1

3、 编写触发器:插入读者记录时,如果读者的类型为‘学生’,则可借天数为30天,若为‘教师’则可借天数为60天
展开
 我来答
百度网友2a3de152f
推荐于2017-12-16 · TA获得超过127个赞
知道小有建树答主
回答量:164
采纳率:100%
帮助的人:106万
展开全部
1、---------------这是分割线--------------------------
Create Trigger tg_借书触发器名 on [借阅记录] For Insert
as
update [借阅记录] set [借阅记录].借书日期=getdate(), [借阅记录].应还日期=getdate()+[读者].可借天数

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

where [借阅记录] in(SELECT [借阅记录] FROM INSERTED)

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

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

2、--------------------这是分割线--------------------------------
create trigger tg_还书触发器名 on [借阅记录] For Update
as
update [图书] set [图书].在库数量=[图书].在库数量+1
where [图书].图书号 in (select 图书号 from Deleted)

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

if(select 1 from Deleted where 应还日期<getdate())

begin
--insert into 超期记录表(编号,读者卡号,超期天数,超期金额) values(…………)

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

3、---------这是分割线--------------------
create trigger tr_插入读者触发器名 on [读者] For Insert
as
if(select 1 from Inserted where 类型='学生')

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

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

注释:触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。
Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
ttpsan520
2014-05-21 · TA获得超过404个赞
知道小有建树答主
回答量:312
采纳率:100%
帮助的人:313万
展开全部
应该注明 你是什么数据库, sql server 、oracle 、mysql 里面的语法是不一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
战地密报
2014-05-21 · TA获得超过211个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:160万
展开全部
才10分·才10分·
更多追问追答
追问
你可以不回答。想学习的人在乎分数?
你可以不回答。想学习的人在乎分数?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式