SQLServer之事务简介

事务定义

事务是单个的工作单元。事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序自动执行。

事务分类

自动提交事务

每条单独的语句都是一个事务。

在自动提交模式下, 每个数据库操作是在执行时已提交的事务。 此模式适合用于包含单个 SQL 语句的许多实际的事务。 不需要分隔,或者指定的这些事务完成。 在数据库中不支持事务的情况下,自动提交模式是唯一支持的模式。 在此类数据库语句仅在提交后可以执行它们并没有方法回滚它们;它们因此始终处于自动提交模式。

如果遵循基础 DBMS 不支持自动提交模式下事务,该驱动程序可以模拟它们通过手动提交每个 SQL 语句,因为它执行。

如果在自动提交模式下执行一批 SQL 语句,则它是数据源特定的语句批处理中提交时。 它们可以是已提交会在执行时或作为一个整体后执行整个批处理。 某些数据源可能支持这两个这些行为,并且可能会提供一种方法选择一个或其他人。 具体而言,如果批处理过程中发生错误,则数据源特定于已执行语句是提交还是回滚。 因此,使用批次,且需要它们来提交或回滚作为一个整体的可互操作应用程序应仅在手动提交模式下执行批处理。

显式事务

每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。

隐式事务

在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。

隐式事务通过设置SET IMPLICIT_TRANSACTIONS  ON 语句,将隐性事务模式设置为打开。

事务特性

事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)属性,只有这样才能成为一个事务。

原子性

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

一致性

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

隔离性

由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

持久性

事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

事务隔离

隔离级别用于决定如何控制并发用户读写数据的操作。

读操作默认使用共享锁;写操作需要使用排它锁。

读操作能够控制他的处理的方式,写操作不能控制它的处理方式。

可序列化性

理想情况下,事务应可序列化。 事务被视为可用作按顺序运行它们的结果的同时运行的事务的结果是相同的情况下序列化 — 即,另一个。 它并不重要的事务,则首先执行,仅的结果不会反映任何混合的事务。

事务隔离级别

事务隔离级别隔离成功事务的范围内的一种度量值。 具体而言,事务隔离级别定义由存在以下现象:

  • 脏读A脏读事务读取尚未提交的数据时发生。 例如,假设事务 1 更新行。 事务 2 在事务 1 提交更新之前读取更新的行。 如果事务 1 回滚更改,将具有事务 2 读取永远不会视为已存在于数据。

  • 不可重复读取A不可重复读事务两次读取同一行,但每次获取不同的数据时发生。 例如,假设事务 1 读取某行。 事务 2 更新或删除该行并提交 update 或 delete。 如果事务 1 重新读取行,它将检索不同的行值或发现该行已被删除。

  • 幻影A幻像是与搜索条件匹配,但是最初未检测到的行。 例如,假设事务 1 读取一组满足某些搜索条件的行。 事务 2 生成一个新行 (通过更新或插入) 事务 1 搜索条件相匹配。 如果事务 1 reexecutes 读取这些行的语句,它获取一组不同的行。

  • 更新丢失,两个事务同时更新,但由于某一个事务更新失败发生回滚操作,这样有可能的结果就是第二个事务已更新的数据因为第一个事务发生回滚而导致数据最终没有发生更新,因此两个事务的更新都失败了。

根据这些现象定义四个事务隔离级别 (如 SQL-92 所定义)。 下表中"X"将标记每个可能发生的现象。

事务隔离级别可能的实现

未提交读

事务不是相互隔离的。 如果 DBMS 支持其他事务隔离级别,它会忽略它使用来实现这两种级别的任何机制。 以便它们不产生不利影响其他事务,在 Read Uncommitted 级别运行的事务是通常是只读的。

已提交读

在事务等待,直到由其他事务写入锁定的行不会被锁定;这可以防止它读取任何"更新"的数据。
事务持有读取的锁 (如果它仅读取行) 或写入锁定 (如果它更新或删除的行) 的当前行,以防止其他事务更新或删除它。 事务释放读的锁时即会关闭当前行。 它保留写锁,直到提交或回滚。

可重复读

在事务等待,直到由其他事务写入锁定的行不会被锁定;这可以防止它读取任何"更新"的数据。
事务持有读取的锁,它返回到的应用程序和写锁,它插入、 更新或删除的所有行的所有行。 例如,如果事务包含的 SQL 语句选择*从订单,如应用程序读取它们的事务读取锁定行。 如果在事务中包含的 SQL 语句删除从订单的状态 = 已关闭,如将其删除的行事务写入锁。
由于其他事务不能更新或删除这些行,当前事务可以避免任何不可重复读取。 事务提交或回滚时释放其锁。

可序列化

在事务等待,直到由其他事务写入锁定的行不会被锁定;这可以防止它读取任何"更新"的数据。
事务持有读取的锁 (如果它仅读取的行) 或写入锁 (如果它可以更新或删除行) 的范围上它的行影响。 例如,如果事务包含的 SQL 语句选择*从订单,范围是整个 Orders 表; 事务读取锁定表而不会允许任何新行插入到它。 如果在事务中包含的 SQL 语句删除从订单的状态 = 已关闭,范围为"已关闭"状态的所有行; 事务写入锁订单中的所有行具有都表状态为"CLOSED"而不会不允许任何行要插入或更新,以便得到的行的状态为"已关闭"。
由于其他事务不能更新或删除范围中的行,当前事务可以避免任何不可重复读取。 由于其他事务不能在范围中插入任何行,当前事务可以避免任何幻影。 事务提交或回滚时释放其锁定。

设置事务隔离级别

若要设置事务隔离级别,应用程序,请使用 SQL_ATTR_TXN_ISOLATION 连接属性。 如果数据源不支持所请求的隔离级别,则驱动程序或数据源可以设置更高的级别。 若要确定哪些事务隔离级别的数据源支持和默认隔离级别是,应用程序调用SQLGetInfoSQL_TXN_ISOLATION_OPTION 和 SQL_DEFAULT_TXN_ISOLATION 选项分别。

更高版本的事务隔离级别提供数据库数据的大多数完整性的保护。 可序列化事务都保证是不受其他事务的影响,因此保证维护数据库的完整性。

但是,更高版本的事务隔离级别可能导致性能下降,因为它增加了应用程序必须等待锁释放的数据的可能性。 应用程序可以指定较低级别的隔离,以提高性能,在以下情况下:

  • 当它可以保证其他任何事务存在,可能会影响应用程序的事务。 这种情况仅在有限的情况下,如小型公司中的某个人时维护 dBASE 文件包含一台计算机上的人员数据中发生,不会共享这些文件。

  • 当速度比准确性和任何错误很可能是小型更为重要。 例如,假设一家公司,使得许多小型销售和大单销售很少。 估计总销售额值中所有打开的事务可以安全地使用 Read Uncommitted 隔离级别。 尽管该事务将包含订单是得到打开或关闭,随后可以回滚,这些将通常相互抵消,事务会快得多,因为它不会阻止每次它遇到这种订单。

可滚动游标和事务隔离

下表列出了用于管理更改的可见性的因素。

所做的更改:可见性取决于:
游标游标类型,游标实现
同一个事务中的其他语句游标类型
在其他事务中的语句游标类型,事务隔离级别

 

 

 

 

 

 

下表总结了每种游标类型能够检测所本身、 其自己的事务中的其他操作和其他事务所做的更改。 后一种更改的可见性取决于游标类型和包含光标的事务的隔离级别。

 

[a] 中括号的字母指示包含游标的事务的隔离级别(在其中进行了更改) 的其他事务的隔离级别是不相关。

RU: 未提交的读

RC: 已提交读

RR: 可重复读

S: 可序列化

[b] 依赖于如何实现游标。 光标是否可以检测此类更改通过中的 SQL_STATIC_SENSITIVITY 选项将报告SQLGetInfo。

事务支持

SQL Server 的 OLE DB 驱动程序实现本地事务的支持。 使用者可借助 Microsoft 分布式事务处理协调器 (MS DTC) 来使用分布式事务或协调事务。 对于需要跨多个会话的事务控制权的使用者,适用于 SQL Server 的 OLE DB 驱动程序可以加入由 MS DTC 启动和维护的事务。

默认情况下,适用于 SQL Server 的 OLE DB 驱动程序使用自动提交事务模式,其中对使用者会话执行的每次离散操作均包含一个针对 SQL Server 实例的完整事务。 适用于 SQL Server 的 OLE DB 驱动程序的自动提交模式是本地的,并且自动提交事务从不会跨多个会话。

适用于 SQL Server 的 OLE DB 驱动程序公开 ITransactionLocal 接口,并允许使用者在 SQL Server 实例的单个连接上使用显式和隐式启动事务。 SQL Server 的 OLE DB 驱动程序不支持嵌套本地事务。

事务应用场景

确保数据完整、安全、一致性。

确保线程之间操作不会相互影响。

事务优点

原子性、一致性、持久性通过数据库日志实现。

批处理数据库操作。

保证数据库级联操作的正确性。

事务缺点

执行较慢。

需要较多的磁盘空间保存事务日志。

执行更新需要内存较多。

 

转载于:https://www.cnblogs.com/vuenote/p/9913845.html

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

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

相关文章

Vmware centos无法连接网络

在vmware下安装了centos7,桥接模式,无法连接网络 解决方案一: 然后重启虚拟机 解决方案二: 然后再试试重启能否联网 解决方案三:

mybatis 一对一 一对多 级联查询

大家好,我是烤鸭: 今天分享一下关于mybatis的级联查询。 环境: mybatis 3.2.8 spring 4.1.9 1. 业务场景 在一个人申请某些账号或者权限的时候,比如微信的认证流程。 会让你一步一步按要求输入,比如第一步&am…

IDEA启动tomcat报错java.util.zip.ZipException: error in opening zip file

原因CATALINA_BASE参数后面多了一个斜杠 将:CATALINA_BASEK:\Tomcats\apache-tomcat-9.0.10_cform\ 改:CATALINA_BASEK:\Tomcats\apache-tomcat-9.0.10_cform

java 实现 常见排序算法(二) 插入排序

大家好,我是烤鸭: 今天分享一下基础排序算法之直接插入排序。 1. 直接插入排序: 原理:假设前面的数为有序数列,然后有序数列与无序数列的每个数比较,我们可以从右向左比较 思路:从第2…

linux 常用 启动命令 汇总

大家好,我是烤鸭: 没有准备启动脚本。服务器出问题之后,重启就是全部重启。 如: mysql,nginx,tomcat,zookeeper,rabbitmq,mongodb,redis,xxxxx 头大。持续更新。。。 consul启动: (公网可以访问 使用-client 0.0.0…

java 爬虫 抓取 网易云音乐

大家好,我是烤鸭: 今天和大家交流一下爬虫,抓取网易云音乐。只讨论技术,不提倡其他的。 1. 找音乐源地址 谷歌浏览器 F12 ,找请求类型是 Media的。 2. 找请求链接 切换请求类型到 All,看 Respons…

idea警告Cannot resolve MVC View

关闭MVC View路径检查,Settings --> Editor -->Inspections -->搜索Spring MVC View—>取消勾选Spring MVC View Reference

ssh sftp 免密码 公钥登录

大家好,我是烤鸭: 今天分享的是java ssh sftp 免密码登录。 1. JAVA代码 ssh连接 http://www.360doc.com/content/14/0409/16/9552892_367544139.shtml https://blog.csdn.net/u013066244/article/details/70198839 公钥和私钥不需要用代码生成&…

CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)

CF传送门 洛谷传送门 【题目分析】 在zxy大佬的讲解下终于懂了这道题的做法了qwq。。。 首先根据题意,出发点不一定在特殊点上,但第一次操作后,之后所有的操作都是在特殊点上,所以先考虑从线上出发的最大概率,再加一步…

SqlServer自定义聚合函数

sqlserver2017版本包括以上的可以使用string_agg(字段,’,’)函数 sqlserver查询版本: select versionSql Server自定义聚合函数详细bai步骤 开始-> 输出-> 首先用baiVS2008/VS2005建立一个SQL Server项目,右键解决方案添加新项 点击“确定…

springboot : Failed to decode downloaded font 和 OTS parsing error

大家好,我是烤鸭: 采坑实录,看了很多人跟我有类似问题,但是都没解决我的问题: Failed to decode downloaded font 和 OTS parsing error: 尝试了把woff文件移动到其他可以加载的静态资源文件夹下,还是无法…

【objectMapper实体转换异常】 com.fasterxml.jackson.databind.exc.MismatchedInputException

大家好&#xff0c;我是烤鸭&#xff1a; 采坑实录&#xff0c;想把json数据直接转成对象&#xff0c;其中有个属性是list<T>&#xff1a; 异常 1 com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.ArrayList o…

java 实现 常见排序算法(三)快速排序

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下基础排序算法之快速排序。快速排序是内部排序&#xff08;基于比较排序&#xff09;中最好的比较算法。 1. 快速排序&#xff1a; 原理&#xff1a;在要排的数&#xff08;比如数组A&#xff09;中选择一个中心值k…

解决org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件。

Hadoop在本地运行的时候总是出现这个异常&#xff0c;虽然这个异常不影响代码运行&#xff0c;但是看着很不爽 1&#xff0c;找到log4j.properties文件&#xff0c;查看log4j.rootLogger&#xff0c;但是却没有debug log4j.rootLogger info,stdout2&#xff0c;查看pom.xm…

springboot websocket

大家好&#xff0c;我是烤鸭&#xff1a; 今天想分享一下springbootwebsocket。 之前接到一个需求&#xff0c;需要在页面监听后台的数据&#xff08;输入邮箱后&#xff0c;需要用户打开邮箱&#xff0c;页面监听用户是否点击激活邮件&#xff09;。之前的实现方式&#xff0c…

idea的plugins无法使用marketplace plugins are not loaded

idea64.exe.vmoptions删除-Djsse.enableSNIExtensionfalse 再次重启后就可以正常使用plugins&#xff01;&#xff01;&#xff01;

断电启动+智能插座 七彩虹B460主板实现电脑远程开机

BIOS设置操作步骤&#xff1a; 1&#xff0c;开机按F2进入BIOS系统&#xff08;小提示&#xff1a;不同的主板按键不一样&#xff0c;开机应该有提示&#xff09; 2&#xff0c;高级模式 > 高级 > 电源管理设置 > 交流电源恢复后处理 > 选择“开机” 3&#xff0c…

myabtis 数字+逗号 传参问题 $和#

大家好&#xff0c;我是烤鸭&#xff1a; 遇到一个maybatis传参的问题。 如果传参是数字逗号的形式&#xff0c;比如1,2,3,4,5。 问题复现&#xff1a; 项目中查询sql和navicat查询sql结果不一致。 1 项目中&#xff1a; 如图所示&#xff0c;查到一条数据。 可以看到…

SpringBoot上传文件到本服务器 目录与jar包同级

前言 看标题好像很简单的样子&#xff0c;但是针对使用jar包发布SpringBoot项目就不一样了。 当你使用tomcat发布项目的时候&#xff0c;上传文件存放会变得非常简单&#xff0c;因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候&#xff0c;…

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

大家好&#xff0c;我是烤鸭&#xff1a; 又是采坑实录。 异常如下&#xff1a; org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipeat org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)at org.ap…