一 事务的属性
事务具有ACID属性
即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性原子性就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全
回滚,全部不保留一致性
事务完成或者撤销后,都应该处于一致的状态隔离性多个事务同时进行,它们之间应该互不干扰.应该防止一个事务处理其他事务也要修改的数据时,
不合理的存取和不完整的读取数据永久性
事务提交以后,所做的工作就被永久的保存下来二 事务并发处理会产生的问题丢失更新当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题、
每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。脏读
当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。
第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。不可重复读当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。
不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。
然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。幻像读当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。
事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。三 事务处理类型自动处理事务系统默认每个T-SQL命令都是事务处理 由系统自动开始并提交隐式事务当有大量的DDL 和DML命令执行时会自动开始,并一直保持到用户明确提交为止,
切换隐式事务可以用SET IMPLICIT_TRANSACTIONS
为连接设置隐性事务模式.
当设置为 ON 时,SET IMPLICIT_TRANSACTIONS 将连接设置为隐性事务模式。
当设置为 OFF 时,则使连接返回到自动提交事务模式用户定义事务由用户来控制事务的开始和结束 命令有: begin tran commit tran rollback tran 命令分布式事务
跨越多个服务器的事务称为分布式事务,sql server 可以由DTc microsoft distributed transaction coordinator
来支持处理分布式事务,可以使用 BEgin distributed transaction 命令启动一个分布式事务处理四 事务处理的隔离级别使用SET TRANSACTION ISOLATION LEVEL来控制由连接发出的所有语句的默认事务锁定行为从低到高依次是READ UNCOMMITTED执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。举例设table1(A,B,C)
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3新建两个连接
在第一个连接中执行以下语句
select * from table1
begin tran
update table1 set c='c'
select * from table1
waitfor delay '00:00:10' --等待10秒
rollback tran
select * from table1在第二个连接中执行以下语句
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
print '脏读'
select * from table1
if @@rowcount>0
begin
waitfor delay '00:00:10'
print '不重复读'
select * from table1
end第二个连接的结果脏读
A B C
a1 b1 c
a2 b2 c
a3 b3 c'不重复读'
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3READ COMMITTED指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。在第一个连接中执行以下语句
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
begin tran
print '初始'
select * from table1
waitfor delay '00:00:10' --等待10秒
print '不重复读'
select * from table1
rollback tran在第二个连接中执行以下语句
SET TRANSACTION ISOLATION LEVEL READ COMMITTEDupdate table1 set c='c'第一个连接的结果初始
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3不重复读
A B C
a1 b1 c
a2 b2 c
a3 b3 cREPEATABLE READ锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。在第一个连接中执行以下语句
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
print '初始'
select * from table1
waitfor delay '00:00:10' --等待10秒
print '幻像读'
select * from table1
rollback tran在第二个连接中执行以下语句
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
insert table1 select 'a4','b4','c4'第一个连接的结果初始
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3幻像读
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3
a4 b4 c4SERIALIZABLE在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。在第一个连接中执行以下语句
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin tran
print '初始'
select * from table1
waitfor delay '00:00:10' --等待10秒
print '没有变化'
select * from table1
rollback tran在第二个连接中执行以下语句
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
insert table1 select 'a4','b4','c4'第一个连接的结果初始
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3没有变化
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3五 事务处理嵌套的语法和对@@TRANCOUNT的影响BEGIN TRAN @@TRANCOUNT+1
COMMIT TRAN @@TRANCOUNT-1
ROLLBACK TRAN

三种使用事务的方式:

1)放在一个try~catch里面
alter PROCEDURE [dbo].[dd]
AS
BEGINbegin try begin traninsert into student values('new111111111111111111111111111','1',2,'23',3,getdate())insert into person values('new21312',5,'45')commit tranend  trybegin catchprint 'a'rollback tranend catch
end2)set xact_abord  on有错误发生时,整个自动回滚ALTER PROCEDURE [dbo].[dd2]
AS
BEGINbegin tranSET XACT_ABORT  oninsert into person values('n',5,'45')insert into student values('new111111111111111111111111111123','1',2,'23',3,getdate())commit tran
end3)自定义变量统计@@error
declare @err int
set @err=0
begin tran--操作1
set @err=@err+abs(@@error)--操作2
set @err=@err+abs(@@error)--操作3
set @err=@err+abs(@@error)
if @err=0 commit
elserollback

转载于:https://www.cnblogs.com/liyb5619/archive/2010/10/29/1864398.html

MS-SQL中的事务相关推荐

  1. TransactionScope与SQL 中的事务

    TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的 ...

  2. MS SQL中的returnoutput的學習

    /*output的應用*/ CREATE PROCEDURE [dbo].[sp_output] (    @i char(1)='1',    @a varchar(5)=null output ) ...

  3. mysql 按比例计算排名_计算MS SQL中的百分比排名

    第50百分位与中位数相同.在计算其他百分位数时,比如说第80位,按照升序排序80%数据的数据,其他百分数按降序排序,并取两个中间值的平均值. 注意:中位查询已经存在了很长一段时间,但不记得我从哪里得到 ...

  4. MS Sql中取每个表的大小,行数

    1select object_name(id) tablename,8*reserved/1024 reserved,rtrim(8*dpages/1024)+'Mb' used,8*(reserve ...

  5. MS SQL Server和Oracle对数据库事务处理的差异性

    背景 在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MS SQL Server和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法. 简 ...

  6. Oracle 9i与MS SQL Server 2000之比较连载五.zz

    http://kb.cnblogs.com/a/1153156 Oracle 9i与MS SQL Server 2000之比较连载五 2008-04-14 18:13 四.Oracle中新的数据库对象 ...

  7. MS SQL Server数据库原理

    MS SQL Server数据库原理 一. 数据库基本概念 数据库系统(DBS):采用数据库技术的计算机系统,由数据库(数据).数据库管理系统(软件).数据库管理员(人员).硬件平台(硬件)和软件平台 ...

  8. Oracle8i与MS SQL SERVER2000之比较

    编者按:这篇文章是我三年前的写的文章 下面是我个人的一点体会,由于水平有限,估计有理解的有一些问题,欢迎指正对于Oracle 8i初学者,很有可能会经常把MS SQL Server中的概念拿来与Ora ...

  9. MS SQL 模仿ORACLE的DESC

    前言: 在ORACLE数据库的SQL*PLUS里面有个DES(DESCRIBE)命令,它可以返回数据库所存储对象的描述,如下所示 SQL> DESC STUDENT_SCORE Name Typ ...

  10. Microsoft SQL Server中的事务(转载)

    1.1 事务的概念 事务是作为单个工作单元而执行的一系列操作,比如查询和修改数据等. 事务是数据库并发控制的基本单位,一条或者一组语句要么全部成功,对数据库中的某些数据成功修改; 要么全部不成功,数据 ...

最新文章

  1. Python入门之编程与编程语言
  2. 监控子进程,退出就重启进程 ,简单版本
  3. BugKuCTF WEB web5
  4. 终于等到你!2020年电子设计竞赛来了!
  5. 多媒体表示、描述、编码以及通信的相关规定和标准课程总结
  6. 电源模块的安全设计和热设计
  7. Java一次编译,到处运行是如何实现的
  8. CentOS上的安装和配置MYSQL 支持 INNODB引擎
  9. 【JZOJ4910】【NOIP2017模拟12.3】子串
  10. [原创]也学NTFS格式磁盘解析及atapi磁盘读写
  11. 扩展欧几里得算法超详解
  12. 接口测试之功能测试,性能测试,安全测试
  13. rtl8812bu网卡Linux驱动,Linux 安装 RTL8812AU 无线 USB 网卡驱动
  14. 二级下拉菜单布局(纵向、横向)
  15. LeafLet实战-扩展工具栏指南
  16. 什么是固定资产管理系统?用固定资产管理系统管理固定资产的好处?
  17. 平行板电容的公式推导
  18. ios给按钮图片根据不同的主题更改颜色
  19. vue 中updated的使用
  20. comsol如何定义狄利克雷边界_COMSOL中周期性边界条件的应用

热门文章

  1. socket通信(C#)
  2. Oracle goldengate 11g错误汇总
  3. Expdp/Impdp 并行导入导出详细测试
  4. GoldenGate 基本参数含义
  5. 命令行方法查看和设置环境变量
  6. SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍
  7. opencv的基本数据结构(一)(转)
  8. 图解CSS3----5-否定伪类选择器
  9. C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
  10. 3.13. Notepad++中Windows,Unix,Mac三种格式之间的转换