实验5 存储过程和触发器

5 篇文章 0 订阅
3 篇文章 3 订阅

实验目的

  1. 加深对存储过程和触发器的理解
  2. 掌握存储过程和触发器的创建和使用,理解它们的执行方式的不同
  3. 理解并体会存储过程和触发器的区别和联系

实验内容

在已建好的各表基础上,根据需要创建相关的存储过程或触发器,完成一定的功能。

1.创建一个InsertS的存储过程,向S中插入一条记录,新记录的值由参数提供。并验证该存储过程的执行情况。

DELIMITER $$
CREATE PROCEDURE InsertS(in SNO0 CHAR(9),IN SNAME0 CHAR(9),IN STATUS0 CHAR(9),IN CITY0 CHAR(9))
    BEGIN 
    INSERT INTO s
    VALUES(SNO0,SNAME0,STATUS0,CITY0);
    END$$
DELIMITER

call InsertS('XX','XX','XX','XX')

 2.创建一个QuerySPJ的存储过程,根据用户提供的工程项目代码查询该工程项目的使用零件情况,并返回使用零件的总数量。

DELIMITER $$
CREATE PROCEDURE QuerySPJ(in JNO0 char(9))
    BEGIN
    SELECT * FROM spj WHERE JNO=JNO0;
    SELECT sum(QTY) as SUM_QTY FROM spj WHERE JNO=JNO0;
    
    END$$
DELIMITER

CALL QuerySPJ("j2")

3.创建一个触发器,使得在S表中删除某条记录时,SPJ表中的数据也进行相应的删除操作。(创建触发器之前先去掉表的外键联系,这个触发器只是模拟一下级联删除操作)

CREATE TRIGGER DropS
BEFORE DELETE ON s FOR EACH ROW
BEGIN 
    DELETE FROM spj WHERE sno = old.sno;
END

DELETE FROM s WHERE sno = "S?"

4.在S表中增加一列属性,属性名为AvgQty,表示供应商的平均供应数量,创建一个触发器,使得当向SPJ表中插入数据时,AvgQty也做相应修改。

        需要在s表上新加一列,列名为A(自定义)

CREATE TRIGGER A
AFTER insert on spj for each ROW
BEGIN
    DECLARE A1 INT;
    SELECT SUM(QTY) FROM spj WHERE sno = new.sno INTO A1;
    UPDATE s SET A = A1 WHERE sno = new.sno;
END

INSERT INTO spj
VALUES('XX','XX','XX','XX');


5.创建一个供应历史表hspj(sno,pno,jno,qty,username,modifydate),记录供应变化情况。实现这样的约束控制:如果spj表中的某条供应记录发生改变,就在hspj表中插入一行历史记录,其中username为操作的用户名,modifydate为操作的时间。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
存储过程触发器是关系型数据库的重要组成部分,它们可以帮助我们提高数据库的性能和数据的安全性。下面分别介绍一下存储过程触发器的概念和用途。 1. 存储过程 存储过程是一段预先编译好的 SQL 语句集合,它可以被多次使用,并且可以带参数存储过程可以用于执行一些比较复杂的操作,例如查询多个表,更多个表,或者执行多个操作的组合。 存储过程的好处在于: - 提高数据库性能:存储过程数据库预编译,可以减少数据库的负担,提高数据库的性能。 - 提高数据安全性:存储过程可以限制对数据库的访问权限,并且可以对数据进行验证和检查。 - 重用性:存储过程可以被多次使用,提高代码的重用性和可维护性。 2. 触发器 触发器是一种特殊的存储过程,它是在数据库发生特定事件时自动执行的。这些事件可以是 INSERT、UPDATE 或 DELETE 操作。触发器可以用于实现数据完整性、安全性和业务逻辑约束等方面。 触发器的好处在于: - 实现数据完整性:触发器可以在数据被写入数据库之前进行验证和检查,确保数据的完整性。 - 提高数据安全性:触发器可以限制对数据库的访问权限,并且可以对数据进行验证和检查。 - 自动化:触发器可以自动执行,减少手动干预的需要。 总之,存储过程触发器是关系型数据库的重要组成部分,它们可以帮助我们提高数据库的性能和数据的安全性。在实际应用,我们可以根据具体情况选择使用存储过程触发器来实现业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值