原子性:不论内部情况如何,从外部看,事务是一个整体--像原子那样不能分割。原子性并不是说事务和原子一样简。根据业务逻辑的复杂程度,事务可以简单到一两行SQL语句,也可以复杂到包含上千行的SQL语句。
一致性:事务能保证数据库的一致性。事务将数据库从一个一致的状态转变为另一个一致的状态。
隔离性:事务往往是存在并发的。为了简化系统编写的难度,数据库系统必须保证事务之间是相互隔离的,即在一个事务执行时,开发人员不需要关心是否并发。
持久性:一个事务执行完成以后,数据库系统必须保证事务对数据库的影响已经永久保存下来了。
建立测试用数据表。Col1字段加了约束,取值必须小于20
USE NorthWind
Create Table Tran_Test(id int identity(1,1),col1 int not null Check(col1<20))
GO
Declare @i AS int
Select @i=1
While @i<=10
Begin
Insert into Tran_Test Values (@i)
Select @i=@i+1
End
GO
要使用事务,需要引用三个命令
Begin Tran : 启动事务,它告诉SQL SERVER一个事务开始了,要求系统按照ACID的标准来处理事务中的语句。
Commit : 提交事务,它告诉SQL SERVER事务执行成功,可以把Begin Tran以后的所有SQL语句造成的数据变成写入磁盘。
RollBack : 撤消事务,它告诉SQL SERVER把Begin Tran以后的所有SQL 语句造成的数据变动撤消,就像他们从来没有执行过一样。
例子:
Declare @ErrorCode int
Select @ErrorCode = 0
Begin Tran
Insert into Tran_Test Values (121)
Select @ErrorCode = @@Error
IF @ErrorCode = 0
Begin
Update Tran_Test Set col1=col1-3
Select @ErrorCode = @@Error
End
IF @ErrorCode = 0
Begin
Insert into Tran_Test Values (15)
Select @ErrorCode = @@Error
End
If @ErrorCode = 0
Begin
Commit
End
Else
Begin
RollBack
End
由此可见,保留事务中每一句SQL 语句的执行状态(@ErrorCode),才能确保事务的原子性。这种用一个值跟踪语句执行状态的方法是一种通用的出错处理方法。
上面的事务属于显示事务,隐式事务正好相反,它不需要用BEGIN TRAN开启事务,而是由一些常见的SQL语句 (UPDATE INSERT)开启
隐式事务的写法
1,在代码开头用 SET IMPLICIT_TRANSACTIONS ON
2,去掉BEGIN TRAN
3,在代码结束恢复系统默认设置 SET IMPLICIT_TRANSACTIONS ON
注意COMMIT ROLLBACK是始终需要的
******* 三种冲突,四种隔离级别 重点学习,并发冲突 *********
为了取得平衡,分析了并发冲突的问题,总结出三类冲突,并且根据用户对冲突问题的承受能力,为事务设计了四种隔离级别,由数据库系统根据事先高的事务隔离级别自动加锁、解锁,取得了提高并发能力,防范并发冲突以及减轻开发人员负担这个方面的统一
三类冲突问题分别是“脏读”,“不可重复读”和“幻影读”。四种隔离级分别是“读未提交”,“读已提交”,“可重复读”,“可串行化”。这四种隔离级别也可以看做四种不同的锁的方案。总地来说,“读未提交”是一种无锁的状态,不能对付任何并发冲突;“读已提交”可以对付“脏读”;“可重复读”可以对付“脏读”和“不可重复读”这两种并发冲突;“可串行化”可以对付所有三种并发冲突。
SQL SERVER默认的事务隔力级别是“读已提交”。可以通过SET TRANSACTION ISOLATION LEVEL来修改事务的隔离级别
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
.....
.....
...
SET TRANSACTION ISOLATION LEVEL COMMITTED
分享到:
相关推荐
Java-JDBC【之】事务介绍、事务特性、操作事务(事务提交、异常回滚) 1.数据库事务 1.1.介绍 1.2.事务特性(ACID) 1.3.隔离性(Isolation),带来的问题与处理 1.4.JDBC事务处理 2.事务提交(代码实现) 3.异常...
(详细)事务特性和隔离级别 事务特性和隔离级别 一.数据库事务特性 数据库事务transaction是组合一系列数据库操作(增删查改)作为一个逻辑处理单元的操作。单元内存ACID四大特性。 原子性(Atomicity):一个事务...
那么你知道InnoDB如何保证这些事务特性的吗?如果知道的话这篇文章就可以直接跳过不看啦(#^.^#) 先说结论: redo log重做日志用来保证事务的持久性 undo log回滚日志保证事务的原子性 undo log+redo log保证事务...
本文来自于csdn,本文主要从分布式的原因,事务特性,和解决方案中深入理解了分布式事务,希望对您的学习有所帮助。 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的...
使用mindmaster打开
通过代码解析spring传播特性,包括 1、Propagation.REQUIRED 方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。 2、Propagation.REQUIRES_NEW 无论何时自身都会开启事务 3、...
动力节点的杜老师讲述的mysql教程,详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看可掌握MySQL全套知识。
事务传播特性了解事务的几种传播特性 总共有七种propagation——required propagation——support propagation——mandatory propagation——not——supported propagation_required_new propagation_never ...
有关JDBC事务 JTA事务 传播特性 隔离级别等等
很多redis分配不支持redis的事务特性。支持独占锁,共享锁,读写锁,并且支持事务提交失败情况下的回滚操作,让开发者可以有更多时间侧重游戏逻辑。此框架已经上线手游项目两年,经过百万级DAU验证,稳定运行。互斥...
java事务传播特性&事务隔离级别...
事务传播特性&事务隔离级别 详细的事务传播特性&事务隔离级别
事务的特性: 事务有以下四个标准属性的缩写ACID,通常被称为: 原子性: 确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。 一致性: 确保数据库正确地改变状态后...
项目中经常会用到自增id,比如uid,下面为大家介绍下利用mysql事务特性实现并发安全的自增ID,感兴趣的朋友可以参考下
- invokeAfterTransaction():开启事务特性,激活扩展点回调延迟到事务提交之后,缺省值为不开启事务特性。 触发方法: - pub():触发业务扩展点,激活响应的回调方法。 钩子方法: - beforePub...
Spring事务的传播特性和隔离级别 事务的几种传播特性详细介绍
一、什么是事务? 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 二、事务的四大属性 分别是原子性、一致性、隔离性、持久性。 1、原子性(Atomicity) ...