sqlserver 事务

下面是 SQL Server 中使用事务的示例 SQL 代码:

BEGIN TRANSACTION;UPDATE 表名
SET 列名 = 新值
WHERE 条件;INSERT INTO 表名 (1,2,3)
VALUES (1,2,3);DELETE FROM 表名
WHERE 条件;COMMIT TRANSACTION;

在上面的示例中,通过 BEGIN TRANSACTION 开始一个新的事务,然后在事务中执行一系列的 SQL 操作,如 UPDATE、INSERT、DELETE 等。最后通过 COMMIT TRANSACTION 来提交事务。如果在事务执行过程中发生错误或者需要回滚,可以使用 ROLLBACK TRANSACTION 来取消当前事务并将数据库回滚到事务开始之前的状态。

另外,可以使用 SAVEPOINT 来设置一个保存点,以便在事务中进行局部回滚,具体可按如下所示:

SAVE TRANSACTION 保存点名称;
-- 在此处执行一些 SQL 操作
ROLLBACK TRANSACTION 保存点名称;

以上是 SQL Server 中使用事务的基本语法,通过合理使用事务,可以确保数据库操作的一致性和完整性。

ACID
在 SQL Server 中,事务是一组 SQL 语句的执行单元,它们被视为一个独立的工作单元。事务具有以下特性:

  1. 原子性(Atomicity):事务是一个原子操作,要么全部成功,要么全部失败。如果事务中的任何一条语句失败,那么整个事务都将被回滚到之前的状态。

  2. 一致性(Consistency):事务执行后,数据库将会处于一致的状态。如果事务操作违反了数据完整性约束,整个事务将被回滚。

  3. 隔离性(Isolation):多个事务可以并发执行,但每个事务的操作都不应受其他正在执行的事务的影响。数据库系统必须保证每个事务的操作都能独立执行,不会相互干扰。

  4. 持久性(Durability):一旦事务提交,其修改将永久保存在数据库中,并且对于系统故障或恢复操作来说是不可逆的。

SQL Server 中可以使用以下语句来控制事务:

  • BEGIN TRANSACTION: 开始一个新的事务。
  • COMMIT TRANSACTION: 提交当前事务,将其更改保存到数据库中。
  • ROLLBACK TRANSACTION: 取消当前事务,并将数据库回滚到事务开始之前的状态。
  • SAVEPOINT: 设置一个保存点,以便在事务中进行局部回滚。

通过使用事务,可以确保数据库中的数据始终保持一致性,并且可以在出现错误或异常情况时回滚到之前的状态,从而保证数据的完整性和可靠性。

sqlserver的隔离级别
SQL Server 提供了四种事务隔离级别,用于控制并发事务的行为和数据可见性。这些隔离级别分别是:

  1. Read Uncommitted(未提交读):事务可以读取未提交的数据,可能导致脏读、不可重复读和幻影读。

  2. Read Committed(提交读):事务只能读取已提交的数据,可以避免脏读,但仍可能出现不可重复读和幻影读。

  3. Repeatable Read(可重复读):事务保证在事务执行期间对同一行的读取结果是一致的,可以避免脏读和不可重复读,但仍可能出现幻影读。

  4. Serializable(可串行化):事务进行排他锁,保证事务执行期间对同一行的读取和写入是串行化的,可以避免脏读、不可重复读和幻影读,但可能导致性能问题。

可以通过以下语句设置隔离级别:

SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

例如:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

需注意,选择适当的隔离级别取决于具体的应用需求和数据一致性要求。更高的隔离级别通常意味着更高的数据一致性,但也可能导致更多的锁和性能开销。

sqlserver 脏读,不可重复读,幻读
在 SQL Server 中,脏读、不可重复读和幻读是与事务隔离级别相关的数据一致性问题。

  1. 脏读(Dirty Read):脏读指的是一个事务读取了另一个事务尚未提交的数据。在脏读的情况下,读取到的数据可能是不正确或无效的,因为可能另一个事务最终并没有提交这些数据。脏读通常发生在未提交读(Read Uncommitted)的隔离级别下。

  2. 不可重复读(Non-Repeatable Read):不可重复读指的是一个事务在多次读取同一行数据时,得到了不同的结果。这是因为在两次读取之间,另一个事务修改了该行数据。不可重复读通常发生在提交读(Read Committed)的隔离级别下。

  3. 幻读(Phantom Read):幻读指的是一个事务在多次读取同一范围的数据时,得到了不同数量的行。这是因为在两次读取之间,另一个事务插入或删除了符合该范围条件的数据。幻读通常发生在可重复读(Repeatable Read)的隔离级别下。

为了避免这些数据一致性问题,需要根据具体的业务需求选择适当的事务隔离级别,并在编写 SQL 语句时考虑并发事务可能带来的影响。

事务快照
在 SQL Server 中,事务快照是一种用于在数据库中获取一致性和可重复性读取的技术,通过它可以在事务的生命周期内保留数据的一致性视图。

当开启一个事务时,SQL Server 会为该事务创建一个事务快照,这个快照是基于当前数据库的一致性的视图,它会在事务的生命周期中保持不变,即使其他事务对数据库进行了修改,也不会影响到事务快照的数据。这意味着在事务快照中,可以看到事务开始时的数据库状态,这对于需要保证读取一致性数据的需求非常有用。

在 SQL Server 中,可以通过使用 “SET TRANSACTION ISOLATION LEVEL SNAPSHOT” 命令来开启事务快照。一旦开启了事务快照,事务内的读取操作将会使用快照来获取数据,而不会受到其他并发事务的影响。

需要注意的是,开启事务快照会增加数据库的一些额外开销,因此需要根据具体的业务需求和性能考虑来决定是否使用事务快照。此外,事务快照功能需要数据库的隔离级别为 “SNAPSHOT” 或 “READ COMMITTED SNAPSHOT”。

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

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

相关文章

[ linux网络 ] 网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

实验准备工作: 网关服务器安装:dhcp bind (yum install -y dhcp bind bind-utlis) server1安装:httpd (yum install -y httpd) 没有网络就搭建本地yum仓库或者配置网卡使其能够上网。 ( 1)网关服务器…

不同域名的页面进行通信,通过iframe和postMessge进行消息通信

不同域名的页面,通过iframe和postMessge进行消息通信 前言 浏览器不同标签页之间进行消息通信,尤其是当这些标签页位于不同域名时,通常需要使用一些特定的技术或协议来实现。以下是几种可能的方法: WebSocket:WebSo…

源聚达科技:抖音店铺2024年卖什么好

随着时代的变迁和科技的进步,消费者的购物习惯与偏好也在不断演变。展望2024年,抖音作为新兴的电商平台,其店铺销售策略需紧跟潮流,才能在激烈的市场竞争中脱颖而出。那么,哪些产品将成为抖音店铺的新宠呢? 首当其冲&…

STM32CubeMax(使用7步)新建工程

现在有时间学习一下STM32用CubeMX新建一个工程的步骤,特此记录一下: 第一步打开STM32CubeMax 第二步搜索芯片型号: 第三步配置时钟: 第四步点选配置时钟源: 第五步填写工程相关的名称路径信息: 第六步选择…

基于SpringBoot3从零配置SpringDoc

基于SpringBoot3从零配置SpringDoc 一、SpringFox二、SpringDoc三、Open API 规范四、SpringBoot3配置Knife4j1.官方参考文档2.添加依赖3.添加配置项4.设置文档首页5.编写控制器6.文档展示 一、SpringFox github SpringFox 已经停止更新了。SpringFox 对 SpringBoot3.0 不适配…

微信小程序开发之Vant组件库

文章目录 环境Vant介绍示例 微信小程序的npm支持安装npm包构建npm 在微信小程序开发中使用Vant准备安装和配置一:安装二:修改app.json三:修改project.config.json四:构建npm包 使用Button组件Calendar组件 参考 环境 Windows 11 …

【开源】基于JAVA+Vue+SpringBoot的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

5G网络eMBB、uRLLC、mMTC

ITU(国际电信联盟)于2015年9月正式定义了5G的三大应用场景:eMBB(增强型移动宽带)、uRLLC(低时延高可靠通信)、mMTC(海量物联网通信)。 eMBB是4G MBB(移动宽带…

【武器工具篇】

Web安全 信息收集 【搜索引擎】 必应:必应 360搜索:360搜索,SO靠谱 俄罗斯搜索引擎:https://yandex.com/ 【子域名收集】 Virus Total:VirusTotal OneForAll:GitCode - 开发者的代码家园 FOFA&…

把Llama2封装为API服务并做一个互动网页

最近按照官方例子,把Llama2跑起来了测试通了,但是想封装成api服务,耗费了一些些力气 参考:https://github.com/facebookresearch/llama/pull/147/files 1. 准备的前提如下 按照官方如下命令,可以运行成功 torchrun -…

【QT+QGIS跨平台编译】之四十二:【QWT+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、QWT介绍二、QWT下载三、文件分析四、pro文件五、编译实践5.1 Windows下编译4.2 Linux下编译5.3 MacOS下编译一、QWT介绍 QWT是一个基于Qt框架的开源C++库,用于创建交互式的图形用户界面。它提供了丰富的绘图和交互功能,可以用于快速开发图形化应用程序。 QWT包…

程序员怎么利用chatgpt提高效率

在当今这个数字化时代,AI 技术以各种形式融入到我们的生活和工作中,对于程序员而言,AI 可以成为他们的得力助手。特别是 OpenAI 的 ChatGPT,其深度学习模型在编程领域具有很大潜力。 首先,我们介绍一下 GitHub Copilo…

【Larry】英语学习笔记语法篇——非谓语动词和从句是一回事

目录 非谓语动词和从句是一回事 不定式:名词/形容词/副词 1、不定式 名词属性的不定式:作为主语、表语、宾语 形容词属性的不定式:作后置定语 副词属性的不定式:作状语 副词属性的不定式:作插入语 不定式的逻辑…

【CSS】display:flex和display: inline-flex区别

flex&#xff1a;将对象作为弹性伸缩盒显示 inline-flex&#xff1a;将对象作为内联块级弹性伸缩盒显示 DOM结构 <div class"main"><div></div><div></div><div></div><div></div></div>flex .main{…

记录 | pytorch计算ap的方法

假设当前经过标签数据与预测数据的加载&#xff0c;我们得到了下面两个变量&#xff1a; det_boxes&#xff1a;包含全部图像中所有类别的预测框&#xff0c;其中一个边框包含了[left, top, right, bottom, score, NameofImage]gt_boxes&#xff1a;包含了全部图像中所有类别的…

聚合支付备案机构如何有效应对自律监督现场检查

孟凡富 在2023年第四季度&#xff0c;部分已备案的聚合支付机构收到了中国支付清算协会的《中国支付清算协会自律检查通知书》&#xff0c;标志着对其进行的现场检查工作正式启动。此次检查的时间范围涵盖了机构从2022年9月1日至2023年8月31日的运营情况&#xff0c;内容广泛&…

Uni-App《》

1. 什么是 UniApp&#xff1f;它有什么特点&#xff1f; UniApp 是一个基于 Vue.js 的跨平台应用开发框架&#xff0c;可以使用 Vue.js 的开发语法编写一次代码&#xff0c;然后通过编译生成可以在多个平台&#xff08;包括iOS、Android、H5 等&#xff09;上运行的应用。UniAp…

HTML世界核心

目录 一、基本文档(Basic Documentation) 二、基本标签(Basic Tags) 三、文本格式化(Formatting) 四、链接(Links) 五、图片(Images) 六、样式/区块(Styles/Sections) 七、无序列表(Disorder List) 八、有序列表(Sequence List) 九、定义列表(Definin…

用户空间与内核通信(二)

文章&#xff1a;用户空间与内核通信&#xff08;一&#xff09;介绍了系统调用&#xff08;System Call&#xff09;&#xff0c;内核模块参数和sysfs&#xff0c;sysctl函数方式进行用户空间和内核空间的访问。本章节我将介绍使用netlink套接字和proc文件系统实现用户空间对内…

python入门----基础

这里写目录标题 重点虚拟环境/与//的区别/// 关于print字符串可以用号拼接单双引号转义符换行三引号 变量变量的定义变量名的命名 API库导库以及使用 注释单行注释多行注释 数据类型strboolNoneTypetype函数 交互模式介绍开启 input作用延伸 if-else条件嵌套语句逻辑运算符内容…