您的当前位置:首页正文

数据库实验六实验报告

来源:一二三四网
--按照《数据库系统概论》的SPJ关系模式实现以下操作: use spj go --1、创建一个作用在P表上的的触发器P_Ins,

--确保用户在插入或更新数据时所提供的WEIGHT值是大于的, --否则给出错误提示并回滚此操作。

create trigger P_Ins on p

for insert , update as if (select weight from inserted)<=0 begin

print '错误' rollback end go

--请测试该触发器。测试方法自定。 insert

into p(pno,pname,color,weight) values('P7','梦园','蓝',-8); update p

set weight=-1 where pno='P1';

--2、创建一个作用在J表上的的触发器J_Update,

--禁止同时修改项目的名称和所在城市,

--并进行相应的错误提示。

create trigger J_Update on j

for update as

if update(jname) and update(city) begin

print '错误' rollback end go

--请测试该触发器。测试方法自定。 update j

set jname='梦园',city='福州' where jno='J1'; --3、首先在数据库中使用SELECT INTO 语句

--从SPJ、J、P表中创建一个新表J_P_QTY。

--表中的属性列包括:工程号、工程名、零件号、零件名及总数量, --其中总数量的值是各工程使用各种零件的数量总和(不考虑零件是由哪个供应商提供的)。 select

j.jno,jname,p.pno,pname,sum(qty) qtys

into J_P_QTY from j,p,spj where j.jno=spj.jno and p.pno=spj.pno group by j.jno,jname,p.pno,pname

--然后创建一个作用在SPJ表上的

Insert型触发器,

--该触发器能完成两项任务: --1)当用户插入的JNO使用的PNO的值在J_P_QTY中不曾存在时禁止插入; --2)每当在SPJ表中插入一条合理记录时,

--使J_P_QTY表的QTY列的值保持同步更新。

create trigger SPJ_Insert on spj for insert as

declare @jno varchar(6),@pno varchar(6),@qty int select

@jno=jno,@pno=pno,@qty=qty

from inserted

if @pno not in (select pno from J_P_QTY

where jno=@jno) begin

print '错误'

Rollback

(or raiserror('禁止插入',16,1) Rollback transaction) end else

update J_P_QTY set qtys=qtys+@qty

where jno=@jno and pno=@pno go

--请测试该触发器。测试方法自

定。 insert

into spj(sno,pno,jno,qty) values('S1','P2','J1',800);

因篇幅问题不能全部显示,请点此查看更多更全内容

Top