【SQL触发器、事务、锁的概念和应用】

【SQL触发器、事务、锁的概念和应用】

1.触发器

(一)触发器概述
1.触发器的定义

触发器(Trigger)是一种特殊的存储过程,它与表紧密相连,可以是表定义的一部分。当预定义的事件(如用户修改指定表或者视图中的数据)发生时,触发器会自动执行。
触发器基于一个表创建,但是可以对多个表进行操作。因此触发器可以用来对表实施复杂的完整性约束,当触发器保存的数据改变时,触发器被自动激活,从而防止对数据的不正确修改。触发器的优点如下。
(1)触发器自动执行,在对表的数据做了任何修改(如手工输入或者使用程序采集的操作)之后立即激活。
(2)触发器可以通过数据库中的相关表进行层叠更改。这比直接把代码写在前台的做法更安全合理。
(3)触发器可以强制限制,这些限制比用CHECK约束定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。
2.触发器的分类
在SQL Server系统中,按照触发事件的不同,可以把提供的触发器分成两大类型,即DDL触发器和DML触发器。
(1)DML触发器
DML 触发器为特殊类型的存储过程,可在发生数据操作语言(DML)事件时自动生效,以便影响触发器中定义的表或视图。DML事件包括 INSERT、UPDATE或DELETE语句。DML触发器可用于强制业务规则和数据完整性、查询其他表并包括复杂的 Transact-SQL语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误(如磁盘空间不足),则整个事务自动回滚。
(2)DDL触发器
DDL触发器将激发响应各种数据定义语言(DDL)事件。这些事件主要与以关键字CREATE、ALTER、DROP、GRANT、DENY、REVOKE或UPDATE STATISTICS开头的Transact-SQL语句对应。
(二)创建触发器
1.DML触发器
因为DML触发器是一种特殊的存储过程,所以DML触发器的创建和存储过程的创建方式有很多相似之处,创建DML触发器的基本语法如下。

CREATE TRIGGER trigger_name
ON {table|view}
{{{FOR|AFTER|INSTEAD OF}{[UPDATE [[,][INSERT][,][DELETE] ]ASsql_statement}
}

CREATETRIGGER语句中,主要参数的含义如下。

trigger_name:是要创建的触发器的名称。
table|view:是在其上执行触发器的表或者视图,有时称为触发器表或者触发器视图。可以选择是否指定表或者视图的所有者。
FOR、AFTER、INSTEAD OF:指定触发器触发的时机。
AFTER:指定触发器只有在SQL语句中指定的所有操作都已成功执行后才触发,只有在所有的引用级联操作和约束检查成功完成后,才能执行此触发器。如果仅指定FOR关键字,则AFTER是默认设置。
INSTEAD OF:指定执行触发器而不是执行触发的SQL语句,从而替代触发语句的操作。在表或视图上,每个INSERT、UPDATE或DELETE语句最多可以定义一个INSTEAD OF触发器。
DELETE、INSERT、UPDATE:指定在表或视图上执行哪些语句时将触发触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。
sql_statement:指定触发器执行的Transact-SQL语句。

【例1】 创建一个触发器,当class表中的班级编号变更时,同时更新student表中的相应班级编号信息。

USE grademanager
GO
CREATETRIGGERtrig_班级信息更新
ON class
FOR UPDATE
AS
IF UPDATE(classno) 
BEGIN
UPDATE student SET classno=(SELECT classno FROM inserted) 
WHERE classnoIN(SELECT classno FROM deleted) 
END

【例2】 创建一个触发器,用于在grademanager数据库中删除student表的一个学生信息时,级联删除该学生对应sc表中的成绩信息。
默认时,由于student表和sc表在sno列上存在外键约束,因此不允许直接删除student表中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式每日硬核训练 Day 17:中介者模式(Mediator Pattern)完整讲解与实战应用

🔄 回顾 Day 16:责任链模式小结 在 Day 16 中,我们学习了责任链模式(Chain of Responsibility Pattern): 将请求沿链传递,节点可选择处理或传递下一节点。实现了请求发送者与多个处理者的解耦…

如何提升个人情商?

引言 提升个人情商(EQ)是一个持续的自我修炼过程,涉及自我认知、情绪管理、人际沟通等多个方面。以下是一些具体且可实践的方法,帮助你逐步提升情商: 一、提升自我觉察能力 1. 记录情绪日记 每天回顾自己的情绪…

STM32Cube-FreeRTOS任务调度与任务管理-笔记

STM32Cube-FreeRTOS任务调度与任务管理-笔记 一、任务调度机制1.1 调度算法类型 二、抢占式调度实现与分析2.1 时间片轮转机制2.2 调度触发条件2.3 抢占式调度例子 三、合作式调度实现3.1 核心逻辑3.1 合作式调度例子 四、任务管理函数详解4.1 任务创建4.1.1 动态创建任务4.1.2…

对称加密算法(AES、ChaCha20和SM4)Python实现——密码学基础(Python出现No module named “Crypto” 解决方案)

文章目录 一、对称加密算法基础1.1 对称加密算法的基本原理1.2 对称加密的主要工作模式 二、AES加密算法详解2.1 AES基本介绍2.2 AES加密过程2.3 Python中实现AES加密Python出现No module named “Crypto” 解决方案 2.4 AES的安全考量 三、ChaCha20加密算法3.1 ChaCha20基本介…

MATLAB图像加密案例

下面是一个使用 MATLAB 编写的简单图像块置乱加密/解密程序,主要利用了函数来组织代码。 这个程序通过将图像分割成小块,然后根据一个密钥(用于随机数生成器种子)打乱这些块的顺序来实现加密。解密过程则使用相同的密钥恢复原始块顺序。 核心思想: 分块: 将图像划分为 …

阿里云服务器全栈技术指导手册(2025版)

阿里云服务器全栈技术指导手册(2025版) 一、基础配置与核心架构设计 1. 精准实例选型策略 • 通用计算场景:选择ECS通用型(如ecs.g7)实例,搭载第三代Intel Xeon处理器,适合Web应用、中小型数…

word批量转pdf工具

word批量转pdf工具 图片 说到了办公,怎能不提PDF转换哦? 这是一款一键就可以批量word转换为PDF的小工具,简直是VB界的一股清流。 图片 操作简单到不行,只要把需要转换的word文件和这个工具放在同一个文件夹里,双击…

C++类_协变返回类型

协变返回类型定义 在 C11 中,协变返回类型是指在基类和派生类的虚函数重写时,派生类中重写的虚函数的返回类型可以是基类中对应虚函数返回类型的派生类型。也就是说,当基类的虚函数返回一个基类指针或引用时,派生类中重写该虚函数…

补充:建立实体类与数据表的映射关系

目录 前言 1 成员变量数据类型和字段类型 保持对应 2 成员变量的变量名,应采用小驼峰命名法 3 数据表中的主键如id 应采用自增方式 4 数据表中的时间类型数据与实体类中的时间类型的变量无法实现自动映射可以使用JsonFormat 注解 4.1 配置全局时间处理器&#x…

HTML/CSS 魔法第二弹:会逃跑的调皮按钮(悬停自动闪避)

引言 在网页设计中,交互性是吸引用户的关键因素之一。普通的按钮在用户悬停时可能只是颜色或样式发生改变,但今天我们要创造一个 “调皮” 的按钮,当用户鼠标悬停在上面时,它会自动闪避,仿佛在和用户玩游戏。本文将详…

**Java面试:技术大比拼**

互联网大厂Java面试:一场严肃与搞笑交织的技术拷问 场景:互联网大厂面试间 面试官(严肃):请坐。马小帅,我们今天主要考察一下你在Java技术栈上的掌握程度,以及如何将这些技术应用于实际业务场景…

25考频高的前端面试题

请求失败会弹出一个toast,如何保证批量请求失败,只弹出一个toast 设置全局标志位,定义一个全局变量(如isToastShown)来表示是否已经弹出过toast。在请求失败的处理逻辑中,首先检查该标志位。如果尚未弹出toast&#xf…

命令模式(Command Pattern)详解

文章目录 1. 什么是命令模式?2. 为什么需要命令模式?3. 命令模式的核心概念4. 命令模式的结构5. 命令模式的基本实现5.1 简单的灯光控制示例5.2 家电控制示例6. 带有撤销功能的命令模式6.1 修改命令接口6.2 实现可撤销的灯光命令6.3 实现可撤销的风扇命令6.4 修改调用者,支持…

《Vue3学习手记8》

vue3中的一些API shallowRef ( ) 和shallowReactive ( ) shallowRef (浅层响应式) 1.作用:创建一个响应式数据,但只对顶层属性进行响应式处理。 2.用法: const originalref(...) const original2shallowRef(original) 3.特点:只跟踪引用值的变化,不关心…

双列集合——map集合和三种遍历方式

双列集合的特点 键和值一一对应,每个键只能对应自己的值 一个键和值整体称为键值对或键值对对象,java中叫做entry对象。 map常见的api map接口中定义了双列集合所有的共性方法,下面三个实现类就没有什么额外新的方法要学习了。 map接口…

Linux安装部署Postgresql数据库

联网安装方案 Linux能在线安装依赖组件的前提下,可以快速安装部署PG数据库,安装过程使用root管理员帐号: 首先,使用如下命令自动下载Postgresql组件: # 在openEuler、Fedora或CentOS 8上,你可能会使用&a…

供应链算法整理(二)--- 智能补货

供应链业务的目标价值是:优化货品的供给、销售提供支撑,以降低成本,提高时效、收益,最终提升用户体验。基于目标价值,整体的算法模块分为:智能选品、智能预测、品仓铺货、智能补货、智能调拨、仓网路由、快…

vscode 个性化

vscode 个性化 设置 吸顶效果 使用前使用后 设置方法 VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行 插件 代码片段分享 - CodeSnap 使用方式 CtrlShiftP输入CodeSnap 唤起插件选择代码 行内报错提示 - Error Lens 使用前使用后 VSCode Error Lens插件介绍&…

Rockermq的部署与使用(0-1)

​RocketMQ​ 是阿里巴巴开源的一款 ​分布式消息中间件,具有高吞吐、低延迟、高可用等特点,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物…

软件测试报告机构如何保障软件质量并维护其安全性?

软件测试报告机构在软件开发流程里起着十分关键的作用,它可以保障软件的质量,它还能够维护软件的安全性。下面,我们就来深入了解一下这类机构。 机构作用 软件测试报告机构是软件质量的“把关者”,能对软件进行全面评估&#xf…