数据库原理与应用(SQL Server)笔记 第九章 存储过程和触发器(下)

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 数据库原理与应用(SQL Server)笔记 第九章 存储过程和触发器

二、触发器


(一)触发器的定义


简单的来说,触发器就是一个特殊类型的存储过程,其特殊性就在于其在修改表数据时自动触发执行所定义的语句。它和存储过程的区别是:存储过程是通过其名称直接调用,而触发器是通过事件进行触发从而自动执行。


(二)触发器的特点和分类


1、触发器的特点

触发器较于存储过程首先是其自动执行,另外它是建立在表或视图上的,而存储过程是建立在数据库上的。此外触发器可以实现比约束还更严谨的限制,从而防止被修改。

触发器:

1667040290663.jpg

存储过程:

1667040323878.jpg


2、触发器的分类


触发器分为DML触发器和DDL触发器,这里的DML和DDL的意义分别是数据操作语言和数据定义语言。


(三)触发器中使用的特殊临时表


这里我们要知道在执行触发器时,系统创建了两个特殊的临时表,分别是INSERTED表和DELETED表,它们在触发器执行时被创建,执行完后消失。


1、INSERTED临时表

当向数据表或视图中插入数据时,INSERT触发器执行,将新元组插入INSERTED临时表及基本数据表中,也就是说INSERTED表是包含了已插入元组的一个副本。

1667040378640.jpg


2、DELETED临时表

(1)当向数据表或视图中执行删除操作时,DELETE触发器执行, 将删除的元组存放到DELETED表中。

1667040389985.jpg

(2)而当向数据表或视图中执行更新操作时,UPDATE触发器执行,执行先删除后插入的命令,即先将数据表或视图中的旧元组移至DELETED表中,然后将修改后的新元组插入到INSERTED表中。

1667040402275.jpg


(四)DML触发器


当数据库有数据操作语言事件时,将调用DML触发器,这里包括修改表或视图数据的INSERT语句、UPDATE语句、DELETE语句,即执行增删改操作。如果检测到错误,DML触发器还可以实现整个事务的自动回滚。DML触发器分为AFTER触发器和INSTEAD OF触发器,它们触发条件差不多只不过执行的方式不同。


1、AFTER触发器

后触发型触发器,当用户对表或视图执行INSERT语句、UPDATE语句、DELETE语句之后,触发器被触发。


2、INSTEAD OF触发器

前触发型触发器,当用户对表或视图执行INSERT语句、UPDATE语句、DELETE语句之后,系统不立即执行这些操作,而是将操作内容交给触发器来检查操作是否正确,若正确才继续执行。


(五)DDL触发器


当有对数据定义事件的修改时执行,例CREATE语句、ALTER语句、DROP语句时才被触发,一般用于执行数据库中的管理任务,防止数据表结构被修改等等。


(六)创建触发器


要注意CREATE TRIGGER必须是批处理中的第一条语句,即在USE <表或视图> 后面要加GO批处理,且触发器只能应用到一个表中。

语句格式如下:

CREATE TRIGGER <触发器的名称> ON <表或视图的名称>
AFTER/INSTEAD OF INSERT (UPDATE/DELETE)
/*指定触发器类型以及触发器的语句类型:插入新行或更改某行或删除某行*/
AS
SQL语句


(七)使用触发器


1、使用AFTER触发器

例7、创建Product表的插入触发器tri_1:其功能是当向该表中插入一条新商品记录后,则提示“向Product表中添加了XXX商品记录”。并验证该触发器。

1667040480279.jpg

sql语句:

USE Sales GO CREATE TRIGGER trigger_1 ON Product AFTER INSERT AS DECLARE @ProductName varchar(30) select @ProductName=ProductName FROM INSERTED PRINT '向Product表中添加了'+@ProductName+'商品记录' GO INSERT Product(ProductID,ProductName,CategoryID,Price,stocks) VALUES('P05001','美汁源2000ml','3','13.5','2699')

1667040501312.jpg

例8、创建Category表的UPDATE触发器trigger_2:其功能是防止用户修改Category表中的分类序号ID。并验证该触发器。

1667040512002.jpg

这里的ROLLBACK TRANSACTION即为事务回滚,由于进行了事务回滚,回滚到更新操作之前的状态,所以没有修改CategoryID为1的日用品的CategoryName列的修改。

sql语句:

USE Sales GO CREATE TRIGGER trigger_2 ON Category AFTER UPDATE AS IF UPDATE(CategoryName) BEGIN PRINT '不能修改分类名称' ROLLBACK TRANSACTION END GO --验证该触发器 USE Sales UPDATE Category SET CategoryName='水果' WHERE CategoryID='1' GO

1667040562818.jpg


2、使用INSTEAD OF触发器


与AFTER触发器不同,INSTEAD OF触发器在触发时只执行触发器内部的T-SQL语句,而不执行激活该触发器的T-SQL语句。


例9、创建Category表的INSTEAD OF触发器trigger_3:其功能是防止用户对该表的任何数据进行删除。并验证该触发器。

1667040632568.jpg

这里由于定义了INSTEAD OF触发器,所以并未删除Category表的记录。

sql语句:

USE Sales GO CREATE TRIGGER trigger_3 ON Category INSTEAD OF DELETE AS PRINT '不能删除该表的数据!' GO --验证该触发器 USE Sales DELETE Category WHERE CategoryID='1' GO

1667040652810.jpg


(八)修改触发器


修改触发器使用ALTER TRIGGER语句进行修改,与创建触发器相同,只不过修改DML、DDL触发器不一样。


(九)删除触发器


删除触发器使用DROP TRIGGER语句进行删除,语句格式如下:

DROP TRIGGER <触发器名称>

1667040726094.jpg

(十)触发器的启用和禁用


若暂时不需要使用某个触发器,我们可以禁用该触发器,使用的T-SQL语句是ENABLE/DISABLE TRIGGER语句。

语句格式如下:

ENABLE/DISABLE TRIGGER ON <表或视图的名称>


结语


以上就是本次数据库原理与应用的全部内容,篇幅较长,感谢您的阅读和支持,若有表述或代码中有不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
14天前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
21 1
|
14天前
|
缓存 关系型数据库 Java
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
19 0
|
4天前
|
存储 关系型数据库 数据库
利用Python与SQLite构建轻量级数据库应用
在当今日益增长的数据处理需求下,数据库成为存储、检索和管理数据的关键技术。然而,对于小型项目或快速原型开发,大型数据库系统可能显得过于庞大和复杂。本文将介绍如何利用Python编程语言与SQLite轻量级数据库,快速搭建一个功能齐全、易于维护的数据库应用。我们将探讨SQLite数据库的特点、Python对SQLite的支持,并通过一个实际案例展示如何构建一个简单的数据库应用,为读者提供一种高效、灵活的解决方案。
|
6天前
|
运维 关系型数据库 分布式数据库
在数据库应用中遇到的问题及阿里云数据库解决方案
企业在面临数据库性能瓶颈、可扩展性问题、高可用性不足及运维复杂等挑战时,选择了阿里云数据库解决方案。阿里云RDS和PolarDB通过读写分离、自动化索引优化、多副本架构等提升性能和扩展性;多可用区部署、数据复制等增强高可用性和容灾能力;自动化运维工具简化管理,降低运维成本。实施后,性能大幅提升,可扩展性增强,高可用性提升,运维工作简化,为业务稳定和未来发展奠定基础。
53 0
|
9天前
|
SQL 关系型数据库 MySQL
SQL基础开发与应用-课程及场景介绍
这是一门关于《SQL基础开发与应用》的课程介绍,主要针对数据库Clouder认证的第二阶段。课程以电商平台后端开发为背景,教授RDS for MySQL的SQL基础知识,包括存储过程、触发器和视图等高级特性,并指导学员使用Python进行数据库的增删改查操作。学习目标包括掌握SQL基础操作,了解RDS的高阶功能,并熟悉Python连接RDS进行数据处理。课程采用场景化教学,以跨境电商网站数据库搭建为例,帮助学员理解实际应用。
21 0
|
14天前
|
存储 数据库
sqlserver------数据库的存储过程(练习)
sqlserver------数据库的存储过程(练习)
16 1
|
14天前
|
存储 人工智能 NoSQL
现代数据库技术演进与应用前景分析
本文探讨了现代数据库技术的演进历程及其在各领域的应用前景。首先介绍了传统数据库的局限性,随后分析了NoSQL、NewSQL以及分布式数据库等新兴技术的特点和优势。接着探讨了人工智能、物联网、大数据等领域对数据库技术提出的新要求,并展望了未来数据库技术的发展趋势与应用前景。
|
14天前
|
存储 NoSQL 搜索推荐
探索新一代数据库技术:基于图数据库的应用与优势
传统关系型数据库在处理复杂的关系数据时存在着诸多限制,而基于图数据库的新一代数据库技术则提供了更为灵活和高效的解决方案。本文将深入探讨图数据库的核心概念、应用场景以及与传统数据库相比的优势,带领读者一窥未来数据库技术的发展趋势。
|
14天前
|
SQL 安全 算法
【SQL server】玩转SQL server数据库:第四章 数据库安全性
【SQL server】玩转SQL server数据库:第四章 数据库安全性
76 12
|
14天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
127 6