数据库设计实验(7)—— 存储过程和触发器

一、目的与要求

  1. 掌握编写数据库存储过程的方法。
  2. 掌握建立数据库触发器的方法,通过实验观察触发器的作用和触发条件设置等相关操作。

、实验准备

  1. 了解编写存储过程和调用的T-SQL语法
  2. 了解触发器的作用;
  3. 了解编写触发器的T-SQL语法。

、实验内容

(一)存储过程

        在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号和课程名称,若院系不存在,返回提示信息。

        提示:D_Info表中存储了院系代码D_ID,而St_Info表中学号字段St_ID的前两位与之对应,则D_Info表与St_Info表之间的联系通过这两个字段的运算构成连接条件。

(1)分别执行存储过程getPractice,查询“法学院”和“材料科学与工程学院”的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号和课程名称。

(2)利用系统存储过程sp_rename将getPractice更名为getPctStu

(3)修改存储过程getPctStu,返回指定院系中参与实践课程的学生人次数,并利用该存储过程以“法学院”为输入参数验证执行的结果

(4)再修改存储过程getPctStu,返回指定院系中参与实践课程的学生人数。

        注:“人数”和“人次数”是不同的,对某一学生而言,如果参与了多门实践课程,则“人次数”是指其参与的课程门数,而“人数”仍为1。

(二)触发器

1.在studentdb数据库中建立一个具有审计功能的触发器:

        触发器名为tr_sc(图7-7),功能要求:审计在s_c_info表中对score字段的更新和插入操作,将这些操作记录到sc_log表(图7-8)中,sc_log表中有如下字段:操作类型type,学号st_id,课程号c_no,旧成绩oldscore,新成绩newscore,操作员uname,操作时间udate,其中操作员设定默认值为user,操作时间默认值为系统时间。

2. 在s_c_info表上建立一个触发器tr_updasc,用于监控对成绩的更新,要求更新后的成绩不能比更新前低,如果新成绩低则取消操作,给出提示信息,否则允许更新。

(三)查看存储过程和触发器的信息

1.用sp_help查看以上建立的存储过程和触发器的基本信息

2.用sp_helptext查看存储过程和触发器的代码

、思考与练习

1.存储过程如何加密?

答:

存储过程加密是一种保护数据库中敏感信息的安全措施。下面是一些常见的存储过程加密方法:

1. 数据库提供的加密功能:某些数据库管理系统(如SQL Server)提供了内置的加密功能,可以使用这些功能对存储过程进行加密。这些功能通常使用对称或非对称加密算法来加密存储过程的代码。

2. 第三方工具:有些第三方工具专门用于数据库对象的加密,包括存储过程。这些工具提供了更多的加密选项和灵活性,可以根据需要选择合适的加密算法和密钥管理方式。

3. 自定义加密方案:开发人员可以自行实现存储过程的加密方案。这通常涉及使用加密算法对存储过程代码进行加密,并使用密钥来保护加密算法的安全性。自定义加密方案需要开发人员具备一定的加密知识和技能。

无论使用哪种加密方法,都需要注意以下几点:

- 密钥管理:密钥是加密的核心,需要妥善管理。密钥应该存储在安全的位置,并只授权给有权限访问存储过程的人员。

- 性能影响:加密和解密过程会增加存储过程的执行时间和资源消耗。在选择加密方法时,需要权衡安全性和性能之间的平衡。

- 维护和管理:加密存储过程后,需要确保适当的管理和维护,包括备份和恢复密钥,更新加密算法等。

需要注意的是,存储过程加密只是保护存储过程代码的一种手段,仍然需要综合考虑数据库的整体安全性,包括访问控制、身份验证、审计等方面的措施。

2.触发器有什么好处和坏处?

答:

触发器是数据库中的一种特殊对象,它在指定的数据库操作(如插入、更新、删除)发生时自动触发执行一段预定义的代码。触发器有以下好处和坏处:

好处:

1. 数据完整性保护:触发器可以用于实施数据完整性规则,确保数据库中的数据符合预期的约束条件,从而提高数据的准确性和一致性。

2. 数据一致性维护:通过触发器,可以在数据库操作时自动更新相关的数据,保持数据的一致性。例如,在更新某个表的同时,触发器可以更新其他相关表中的数据,确保数据的同步。

3. 安全性增强:触发器可以用于实施安全策略,例如在插入、更新或删除数据时进行权限验证,确保只有授权的用户可以执行相关操作。

4. 业务逻辑实现:触发器可以用于实现复杂的业务逻辑,如计算字段值、生成自动编号等。通过触发器,可以在数据库层面上实现业务规则,减少应用程序的复杂性。

坏处:

1. 性能影响:触发器的执行会占用数据库资源,可能导致数据库性能下降。特别是当触发器的逻辑较为复杂或触发频率较高时,会对数据库的性能产生较大的影响。

2. 隐式操作:触发器的存在可能导致部分操作变得隐式化,不易被开发人员察觉和控制。这可能增加代码的复杂性和维护难度。

3. 调试和测试困难:触发器的逻辑通常在数据库中执行,不易进行单元测试和调试。当触发器存在问题时,定位和修复可能较为困难。

因此,在使用触发器时,需要权衡其带来的好处和坏处,确保在合适的场景下使用,并进行适当的性能优化和测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李独爱秋

你的鼓励将是我加更的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值