SQL Server 2019 数据库编程——触发器实验

一、相关知识点

SQL Server 触发器是一种特殊类型的存储过程,它在特定的表上执行并响应数据修改事件。触发器可以用于执行数据验证、数据转换、数据审计和其他业务逻辑操作。

以下是一些与 SQL Server 触发器相关的重要知识点:

1. 触发器类型:SQL Server 触发器分为两种类型,即行级触发器(Row-Level Triggers)和语句级触发器(Statement-Level Triggers)。行级触发器在每个受影响的行上都执行一次,而语句级触发器在每个语句上仅执行一次。

2. 触发器事件:触发器是针对特定的数据改变事件执行的。常见的触发器事件包括插入(INSERT)、更新(UPDATE)和删除(DELETE)。

3. 创建触发器:可以使用 CREATE TRIGGER语句来创建触发器。触发器可以在表级别上定义,以及定义为在 INSERT、UPDATE 或 DELETE 事件发生时执行。

4. 触发器的触发顺序:当多个触发器与一个表事件相关联时,SQL Server 按照它们的创建顺序执行这些触发器。在执行时,可以使用 sp_settriggerorder 存储过程进行顺序控制。

5. 触发器使用的伪表:在触发器的执行过程中,可以使用 INSERTED 和 DELETED 这两个特殊的伪表来访问触发器操作所影响的数据。INSERTED 表包含插入或更新的新值,而 DELETED 表包含更新或删除前的旧值。

6. 触发器的禁用和启用:可以使用 ALTER TABLE 语句的 ENABLE TRIGGER 和 DISABLE TRIGGER 子句来启用或禁用特定的触发器。

7. 触发器的性能影响:虽然触发器提供了强大的功能,但如果不正确使用,可能会对数据库性能产生负面影响。过多的触发器、复杂的触发器逻辑和频繁的触发器执行可能会导致性能下降。

二、软件版本

Microsoft SQL Server Management Studio(v18.7.1)

三、实验所用数据库

实验所基于的销售管理数据库中涉及以下表:

四、实验内容

1.  创建触发器trigger_delete,实现以下功能:当订单表的数据被删除时,显示提示信息“订单表记录被修改了”。

2.  对Sell_Order表创建名为reminder的触发器,当用户向Sell_Order表中插入或修改记录时,自动显示Sell_Order表中的记录。

3.  对Employee表中创建名为emp_updtri的触发器,实现如下功能:当修改姓名时,自动检查订单表,确定是否有该员工的订单,如果存在该员工,则撤销操作。

4.  创建一个INSERT触发器,当在Employee表中插入一条新员工记录时,如果是“人事部”的员工,则撤销该插入操作,并返回出错消息。

5.  创建一个product_order_delete的触发器,其功能是:当删除商品表中的商品记录时,同时删除订单表中相应的订单,并显示提示信息“有关商品已被删除”。

6.  创建一个名为employee_deleted的触发器,其功能是:当对Employee表进行删除操作时,首先检查订单表,如果删除的员工没有接收订单,可以删除该员工的消息,否则撤销删除,显示“无法修改”的信息。

五、实验过程及数据记录

1.  创建触发器trigger_delete,实现以下功能:当订单表的数据被删除时,显示提示信息“订单表记录被修改了”。

2.  对Sell_Order表创建名为reminder的触发器,当用户向Sell_Order表中插入或修改记录时,自动显示Sell_Order表中的记录。

3.  对Employee表中创建名为emp_updtri的触发器,实现如下功能:当修改姓名时,自动检查订单表,确定是否有该员工的订单,如果存在该员工,则撤销操作。

(1)定义触发器:

(2)尝试修改:

4.  创建一个INSERT触发器,当在Employee表中插入一条新员工记录时,如果是“人事部”的员工,则撤销该插入操作,并返回出错消息。

(1)定义触发器:

(2)尝试插入:

5.  创建一个product_order_delete的触发器,其功能是:当删除商品表中的商品记录时,同时删除订单表中相应的订单,并显示提示信息“有关商品已被删除”。

(1)定义触发器:

(2)删除操作:

6.  创建一个名为employee_deleted的触发器,其功能是:当对Employee表进行删除操作时,首先检查订单表,如果删除的员工没有接收订单,可以删除该员工的消息,否则撤销删除,显示“无法修改”的信息。

(1)定义触发器:

(2)尝试删除:

六、实验小结

1、instead of触发器是在insert、update、delete这些操作进行之前就被激活了,并且不再去执行原来的dml SQL操作,而是用触发器内部的SQL语句代替执行。所以用了instead of的表做任何dml操作,都只会执行触发器内部的语句,INSTEAD OF 触发器的主要优点是使不可被修改的视图能够支持修改。

例如,本次实验中的第5题,Product与Purchase_Order之间存在参照完整性约束,即Purchase_Order的ProductID是外码。如果想要删除Product中的元组必须先删除Purchase_Order中与之关联的信息。所以,使用instead of,先不删除Product中的信息,在触发器里先删除相关联的信息,再删除Product中的信息。

2、after触发器和instead of触发器的区别:

(1)after触发器是在操作成功后,所采取的一些动作;

(2)而对于instead of触发器,对数据库的操作只是一个“导火线”而已,真正起作用的是触发器里面的动作;往往触发器中会有很多分支判断语句在里面,根据不用的条件做不同的动作。

3、一般情况下采用的for触发器,是在进行操作时,采取的一些动作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,我无法对您提供实验结果分析的具体细节,因为我不知道您的实验目的和具体实验内容。但是,一般来说,存储过程是一段预定义的 SQL 代码,可重复执行,用于完成某些特定的任务。在数据库编程中,存储过程可以用于实现数据的增删改查、数据验证、数据备份等操作。 在进行实验时,您需要根据具体的实验要求和目的,编写相应的存储过程,并通过执行存储过程来完成相应的任务。在实验结果分析中,您需要评估存储过程的执行效率、准确性、稳定性等方面的表现,以及分析存储过程是否满足实验要求和目的。 一般来说,存储过程在数据处理方面具有一定的优势,比如可以减少网络传输量、提高数据处理效率、保证数据安全性等方面。同时,存储过程也需要注意一些细节问题,比如参数传递、异常处理等方面。因此,在实验结果分析中,需要全面考虑存储过程的各种优缺点,以及针对实验要求和目的的具体表现和效果。 ### 回答2: 数据库编程中的存储过程是一种在数据库中预先定义的一段可执行的代码,用于完成特定的操作。通过使用存储过程,我们可以将一系列的数据库操作封装在一个可重复调用的单元中,从而提高数据库的性能和安全性。 在进行实验结果分析时,存储过程能够帮助我们实现以下几个方面的功能: 1. 数据聚合和计算:存储过程可以对数据库中的数据进行聚合和计算,从而快速地获取到实验结果的统计信息。例如,我们可以使用存储过程来计算某个实验样本的平均值、标准差等统计指标,从而更好地理解实验结果的分布情况。 2. 数据筛选和过滤:通过在存储过程中定义特定的筛选条件,可以从数据库中选择符合特定要求的数据进行分析。例如,我们可以设计一个存储过程,通过传入某个实验条件的参数,来筛选出符合该条件的实验结果进行进一步分析。 3. 数据更新和修改:在实验结果分析过程中,我们可能需要对数据库中的数据进行更新和修改,以便更好地理解实验结果的变化趋势。存储过程可以帮助我们实现对数据库中数据的批量更新和修改,从而提高数据更新的效率和准确性。 4. 数据报告生成:存储过程可以通过预定义的查询语句,将实验结果转化为指定格式的报告。例如,我们可以使用存储过程来将某个实验结果的数据生成为图表或表格的形式,以便更好地展示和分享实验结果。 综上所述,数据库编程中的存储过程可以在实验结果分析中发挥重要的作用。通过存储过程,我们可以实现数据聚合和计算、数据筛选和过滤、数据更新和修改以及数据报告生成等功能,从而更好地理解和分析实验结果。 ### 回答3: 数据库编程中的存储过程是一种在数据库中存储的可重复使用的程序,用于执行特定的任务。存储过程可以包含SQL语句、条件和循环操作,可以接受参数输入和返回结果输出。 通过实验结果分析存储过程的效果可以得出以下几点: 首先,存储过程可以提高程序的性能和效率。由于存储过程是预编译的,它们在数据库中存储,并且可以重复利用。相比于每次执行单独的SQL语句,存储过程可以减少网络通信开销和数据库连接成本,提高了数据处理的速度。 其次,存储过程可以提高数据的安全性和一致性。通过存储过程,可以对具有相同权限的用户提供统一的数据访问接口。这样可以避免不同的用户使用不同的SQL语句,导致数据不一致或者安全漏洞的问题。 另外,存储过程还可以简化复杂的数据操作。在存储过程中,可以使用条件和循环语句,对数据进行逻辑处理。这样可以减少客户端的代码量,提高代码的可读性和可维护性。 最后,存储过程还可以实现数据的批量处理和事务控制。通过存储过程,可以一次性处理多条数据,提高数据库的处理效率。而且存储过程还支持事务的处理,可以确保一组操作要么全部成功,要么全部失败,保证数据的一致性和完整性。 综上所述,通过实验结果可以发现,存储过程在数据库编程中具有较高的实用性和效果。它可以提高程序的性能和效率,增强数据的安全性和一致性,简化复杂的数据操作,实现数据的批量处理和事务控制。因此,在进行数据库编程时,合理地使用存储过程可以有效地提高数据库的处理能力和数据的管理水平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值