数据库实验:存储过程与触发器设计

一、实验内容 1、创建一个存储过程,计算employee表中的员工人数,并存储到一个局部变量中,并输出该变量结果,尝试调用存储过程。 2、创建一个存储过程,比较两个员工的实际收入,若前者比后者高 就输出0,否则输出1,员工用其员工编号识别 3、创建触发器,在employee表中删除员工信息的同时将salary表中该员工的信息删除,以确保数据完整性。创建完成后尝试删除employee表中的一行数据,然后查看salary表中的变化情况 4、当修改employee表时,若将employee表中的员工工作时间增加一年,则将收入增加500,增加两年则收入增加1000,以此类推 思考题: 研究database3中的insertOrders.sql和insertPsrtSupp.sql两个存储过程文件,分析其产生数据的原理以及存储过程主体语句功能

二、实验过程 1、use dbem; delimiter create procedure test (out amount1 int) begin declare amount int; set amount=(select count(*)from employee); set amount1=amount; end delimiter ; call test(@amount1); select @amount1; 2、delimiter create procedure comp(in id1 char(6),in id2 char(6),out bj int) begin declare sr1,sr2 float; select Income-Outcome into sr1 from salary where employeeID=id1; select Income-Outcome into sr2 from salary where employeeID=id2; if sr1>sr2 then set bj=0; else set bj=1; end if; end delimiter ; call comp(‘000001’,‘108991’,@bj1); select @bj1; 3、create trigger delete1 after delete on employee for each row begin delete from salary where employeeID=old.employeeID; end delimiter ; SET SQL_SAFE_UPDATES = 0; delete from employee where employeeID=504209; delimiter 4、create trigger employee_update after update on employee for each row begin update salary set income=(income+(new.workYear-old.workYear)*500); end delimiter ; update employee set workYear=8 where employeeID=“000001”;

修改前: 修改后: 三、思考题 对于insertOrders:将customer数量的值赋值给customerCount。当p_orderCount大于零时,将tmpOrder的值加一,并将它赋值给NewOrderKey。将customerCount乘以一百再乘以一个随机值后与它本身求模后的值赋值给tmpCust。最后向Orders里插入数据,实现核心功能。

对于insertPartSupp:将Part,Supplier数量值分别赋值给partCount,supplierCount。当p_partsuppCount大于零时,将partCount,supplierCount乘以一百再乘以一个随机值后与它本身求模后的值分别赋值给tmpPart,tmpSupp。最后实现的核心功能是向PartSupp中插入数据。

经验分享 程序员 微信小程序 职场和发展