查询优化与事务处理——触发器、事务、锁

一、认识触发器:

触发器是在对表进行插入.更新或删除操作时自动执行的存储过程。触发器通常用于强制业务规则,是--种高级约束.可以定义比用CHECK约束更为复杂的约束,可执行复杂的SQL语句〈如F/WHLE/CASE),可引用其他表中的列。触发器主要是通过事件进行触发而被执行的.而存储过程可以通过存储过程名称而被直接调用。当对某一表进行修改,如UPDATE、NSERT、DELETE这些操作时,SQL Server 会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。由此触发器可分为以下几种。

1.INSERT触发器:当向表中插入数据时触发.自动执行触发器所定义的SQL语句。

2.UPDATE触发器:当更新表中某列、多列时触发.自动执行触发器所定义的SQL语句。

3.DELETE触发器:当删除表中记录时触发.自动执行触发器所定义的SQL语句。

1.2 deleted表和inserted表:

 每个触发器有两个特殊的表:删除表(deleted表)和插入表(inserted表)。这两个表是逻辑表.并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此不允许用户直接对其进行修改。`

1.3 触发器的作用:

1)强化约束
触发器能够实现比CHECK语句更为复杂的约束。
约束和触发器在特殊情况下各有优势。触发器的主要优势在于它可以包含使用T-SQL代码的复杂处理逻辑。因此.触发器可以支持约束的所有功能。

2〉跟踪变化
触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的更新和变化。

3)级联运行
触发器可以侦测数据库内的操作.并自动地级联影响整个数据库的各项内容。例如.某个表上的触发器中包含对另外--个表的数据操作.如删除.更新、插入,而该操作又导致该表上触发器被触发。触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。

 

1.4 创建触发器: 

CREATETRIGGER trigger_nameON table_name
【wITH ENCRYPTION]
FOR { [DELETE,工NSERT,UPDATE])
As SQL语句

二、认识事务: 

SQL Server通过支持事务机制以保证数据的一致性。事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一-个整体一起向系统提交或撤销操作请求,即这一-组数据库命令要么都执行.要么都不执行。因此,事务是--个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是作为最小的控制单元来使用的,它特别适用于多用户同时操作的数据库系统。

事务是作为单个逻辑工作单元执行的-系列操作。-个逻辑工作单元必须有四个属性.即原子性(Atomicity)、一致性(Consistency)、隔离性(lsolation)及持久性(Durability),这些特性通常简称为ACD。

1.原子性
事务是一-个完整的操作。事务的各元素是不可分的(原子的)。事务中的所有元素必须作为一个整体提交或回滚。如果事务中的任何元素失败,则整个事务将失败。
2.一致性
当事务完成时.数据必须处于一致状态。也就是说.在事务开始之前,数据库中存储的数据处于一致状态。在正在进行的事务中,数据可能处于不一致的状态.如数据可能有部分修改。然而,当事务成功完成时.数据必须再次回到已知的一-致状态。通过事务对数据所做的修改不能损坏数据.或者说事务不能使数据存储处于不稳定的状态。

3.隔离性
对数据进行修改的所有并发事务是彼此隔离的.这表明事务必须是独立的.它不应以任何方式依赖于或影响其他事务。修改数据的事务可以在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。

4、持久性
事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的。

三、认识锁:

多个用户能够同时操纵同一个数据库中的数据.会发生数据不一致现象。也就是说.如果没有锁定且多个用户同时访问一个数据库,则当事务同时使用相同的数据时可能会发生问题。这些问题包括丢失.更新.脏读.不可重复读和幻觉读。数据库加锁就是为了解决以上的问题。

3.2 锁的模式:

1.共享锁(S锁):用于读取资源所加的锁。拥有共享锁的资源不能被修改。共享锁在默认情况下是读取了资源马上被释放。例如,读100条数据.可以想象成读完了第一条,马上释放第一条,然后给第二条数据上锁.再释放第二条.再给第三条上锁。以此类推直到第100条。

2.排他锁(X锁):和其他任何锁都不兼容,包括其他排他锁。排他锁用于数据修改。当资源上加了排他锁时,其他请求读取或修改这个资源的事务都会被阻塞,直到排他锁被释放为止.

3.更新锁(U锁}:U锁可以看作S锁和×锁的结合,用于更新数据,更新数据时首先需要找到被更新的数据,此时可以理解为被查找的数据上了S锁。当找到需要修改的数据时.需要对被修改的资源上×锁。SQL. Server通过U锁来避免死锁问题。因为S锁和S锁是兼容的.通过U锁和S锁兼容,使更新查找时并不影响数据查找.而U锁和U锁之间并不兼容.从而减少了死锁可能性。

四、实验:

4.1 实验描述:

创建一个UPDATE触发器,以确保xueyuan表中的数据不会被更改。




 

4.2使用系统存储过程查看相关信息:

查看数据库的信息。

exec sp_databases

 

查看数据库中可查询的表或视图的信息。

exec sp_tables

 

查看数据库中xueyuan表的约束。

exec sp_helpconstraint xueyuan

 

查看数据库中 xueyuan表的索引。

exec sp_helpindex xueyuan

 

查看数据库中的所有存储过程。

exec sp_stored_procedures

 

查看在实验案例三中创建的触发器的实际文本。

exec sp_helptext xiugai

 


 




 


 




 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony创新赛人气投票活动,最佳人气作品由你来定!

12月1日至12月15日 十大入围作品线上投票激战正酣 最佳人气作品,由你来定! 投票链接:OpenHarmony创新赛人气作品投票正式开启——最佳人气作品,由你来定! - 文章 OpenHarmony开发者论坛

C语言leetcode集训二:字符串(1):字符串遍历

今天集训的内容是字符串中的字符串遍历题,仍然是简单题,但也可以掌握一些字符串所必要的知识,加深对字符串的理解,关于字符数组和字符串,字符串的输入输出在这就不再做过多赘述,关于字符串的问题&#xff0…

《IT圈里的“鄙视链”:看不起谁又被谁看不起?》

文章目录 每日一句正能量前言一、编程语言篇二、工具篇三、操作系统篇四、硬件篇五、职场篇后记 每日一句正能量 人的结构就是相互支撑,众人的事业需要每个人的参与。 前言 每个领域都存在着错综复杂的鄙视链,这一点在IT 领域更为突出。从编程语言、工具&#xff0…

简单的 u-popup 弹出框

uniapp中的popup组件可以用于弹出简单的提示框、操作框、菜单等。它可以通过position属性控制弹出框的位置,不同的position值会使得弹出框呈现不同的弹出形式 目录 一、实现思路 二、实现步骤 ①view部分展示 ②JavaScript 内容 ③css中样式展示 三、效果展示 …

C++连接mysql(改进)

使用vs2019对window11中的数据库进行连接 1. 配置连接环境 首先需要把mysql中的头文件和库文件放入到c项目工程中 1.打开安装MySQL的目录,在windows系统中如果是默认路径,应该和我的是一样的:C:\Program Files\MySQL\MySQL Server 8.0 2.找到…

某音上很火的圣诞树分享

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 效果截图&#xff08;这里不给动态了&#xff0c;某音到处都是了&#xff09;&#xff1a; 源代码&#xff1a; <script src"…

LeetCode-1008. 前序遍历构造二叉搜索树【栈 树 二叉搜索树 数组 二叉树 单调栈】

LeetCode-1008. 前序遍历构造二叉搜索树【栈 树 二叉搜索树 数组 二叉树 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;题目大致意思就是给定一个二叉树的前序遍历&#xff0c;求对应的二叉搜索树。一种比较特殊的点是「二叉搜索树」的中序遍历的结果是【有序序列】&am…

智慧水利-城市水循环可视化助力城市水资源可持续发展

2021年《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》明确指出&#xff1a;构建智慧水利体系&#xff0c;以流域为单元提升水情测报和智能调度能力。水利部按照“需求牵引、应用至上、数字赋能、提升能力”总要求&#xff0c;编制了《“十四五”智…

深入理解强化学习——马尔可夫决策过程:预测与控制

分类目录&#xff1a;《深入理解强化学习》总目录 预测&#xff08;Prediction&#xff09;和控制&#xff08;Control&#xff09;是马尔可夫决策过程里面的核心问题。预测&#xff08;评估一个给定的策略&#xff09;的输入是马尔可夫决策过程 < S , A , R , P , γ > …

中职网络安全应急响应—Server2228

应急响应 任务环境说明: 服务器场景:Server2228(开放链接) 用户名:root,密码:p@ssw0rd123 1. 找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交; 通过用户名和密码登录系统 在 Linux 中,利用 “alias” 命令去查看当前系统中定义的所有别名 flag:ss …

LeetCode:1631. 最小体力消耗路径(SPFA Java)

目录 1631. 最小体力消耗路径 题目描述&#xff1a; 实现代码与解析&#xff1a; BFSDP 原理思路&#xff1a; 1631. 最小体力消耗路径 题目描述&#xff1a; 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights &#xff0c;其中 heights[row][col] 表…

python 爬虫 m3u8 视频文件 加密解密 整合mp4

文章目录 一、完整代码二、视频分析1. 认识m3u8文件2. 获取密钥&#xff0c;构建解密器3. 下载ts文件4. 合并ts文件为mp4 三、总结 一、完整代码 完整代码如下&#xff1a; import requests import re import os from tqdm import tqdm from Crypto.Cipher import AES# 创建临…

通过Jmeter压测存储过程

一、存储过程准备&#xff1a; 1、建立一个空表&#xff1a; 1 CREATE TABLE test_data ( id NUMBER, name VARCHAR2(50), age NUMBER ); 2、建立一个存储过程&#xff1a; CREATE OR REPLACE PROCEDURE insert_test_data(n IN NUMBER) ASBEGIN--EXECUTE IMMEDIATE trunca…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion 黑白老照片上色修复

在这个时代,我们习惯于拥有高清、色彩丰富的照片,然而,那些古老的黑白色老照片由于年代的久远,往往会出现模糊、破损等现象。 那么今天要给大家介绍的是,用 Stable Diffusion 来修复老照片。 前段时间 ControlNet 的除了上线了“IP-Adapter”模型以外还增加另一个…

JVM虚拟机系统性学习-对象存活判断算法、对象引用类型和垃圾清除算法

垃圾回收 在 JVM 中需要对没有被引用的对象&#xff0c;也就是垃圾对象进行垃圾回收 对象存活判断算法 判断对象存活有两种方式&#xff1a;引用计数法、可达性分析算法 引用计数法 引用计数法通过记录每个对象被引用的次数&#xff0c;例如对象 A 被引用 1 次&#xff0c…

决策报表布局方式(新建一个绝对布局,双击,在拖其它图表,报表块装进去。就不会变形)

FineReport11.0 1.绝对布局&#xff1a; 只是适合自己调试电脑显示&#xff0c;适用于一个展示区域需要用多个组件叠加组成时使用 2.自适应布局&#xff1a;双向自适应 &#xff1a; https://help.fanruan.com/finereport/doc-view-4276.html 组件会自动调整显示宽度以适应不…

实战React18和TS+Vite,跟进实战阅读类App的心得分享

随着 React 18 的发布&#xff0c;以及 TypeScript 和 Vite 在前端开发领域的普及&#xff0c;使用 React 18 结合 TypeScript 和 Vite 开发实战阅读类 App 的经验已经成为了前端开发者们的热门话题。在本文中&#xff0c;我将分享我的心得体会&#xff0c;并给出一些示例代码&…

12.11_黑马数据结构与算法笔记Java

目录 070 栈 链表实现 概念理清&#xff1a;什么时候是指针的指向&#xff0c;什么时候是元素本身&#xff1f; 071 栈 数组实现 072 栈 e01 有效的括号 072 栈 e02 后缀表达式求值 072 栈 e03 中缀表达式转后缀1 072 栈 e03 中缀表达式转后缀2 072 栈 e03 中缀表达式转…

Linux之进程(三)(环境变量)

目录 一、基本概念 二、环境变量 1、PATH 2、HOME 3、SHELL 三、环境变量参数 四、argc和argv 一、基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。如&#xff1a;临时文件夹位置和系统文件夹位置等。环境变量通常…

通用的AGI 安全风险

传统安全风险 平台基础设施安全风险 模型与数据层安全风险 应用层安全风险 平台基础设施安全风险 &#xff08;1&#xff09;物理攻击&#xff1a;机房管控不到位 &#xff08;2&#xff09;网络攻击 &#xff08;3&#xff09;计算环境&#xff1a;自身安全漏洞&#xf…