码迷,mamicode.com
首页 > 其他好文 > 详细

事务的特性

时间:2015-07-08 22:35:04      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:

事务作为单个逻辑工作单元执行一系列的操作,一个逻辑工作单元必须具有四个属性:原子性,一致性,隔离性,持久性,只有同时满足这四个特性,才能成为一个事务。

一,事务的四个属性

原子性:事务是原子工作单元,对于数据修改,要么全部执行,要么全部不执行。

一致性:事务在完成时,必须保证数据对象的所有状态都保持一致,事务结束时,所有的内部数据结构(索引,索引视图等)都必须是正确的。

隔离性:由并发事务所做的修改必须与其他任何并发事务所做的修改隔离。

持久性:事务完成之后,对数据的修改是永久性的。

二,事务的两种类型

1,隐式事务,每一条Sql 语句都是一条事务,这条语句要么成功,要么失败。

2,显式事务,由begin tran开启的事务,但是显式事务中任何一条语句失败,sql server并不都回滚,需要设置数据库选项

 

SET XACT_ABORT { ON | OFF } ,OFF 是默认设置。

当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。

 

3,分布式事务,跨越多个服务器的事务称为分布式事务,使用 begin distributed transaction 命令启动一个分布式事务

 

三,数据库引擎提供一种机制,保证事务的特性。

1,事务的管理特性,保证事务的原子性和一致性

事务启动之后,必须成功完成,否则,数据库引擎将撤销该事务启动之后对数据所做的所有修改

2,先写入日志方式,保证事务的持久性

 sql server通过先写入日志,后写入数据的机制来保证事务的持久性。如果在写入日志时,出现故障,那么sql server将不会对数据做修改;如果日志写入成功,在写数据时出现故障,那么sql server将所有未完成的事务自动回滚到系统出现故障的点,保持数据的持久性。

3,使用锁来加锁资源,使事务保持隔离

sql server 通过在访问不同资源时,申请不同类型的锁的方式,实现不同事务之间的隔离。如果两个事务同时申请一个资源,那么在其中一个事务申请到锁之后,另外一个事务必须等待,直到前一个事务释放锁为止。

锁是实现事务隔离的一部分,阻塞是实现事务隔离所带来的不可避免的代价。

 

三,锁和事务的隔离性

 隔离性是事务的一个特性,sql server 使用锁来保证事务的隔离性。

事务的特性

标签:

原文地址:http://www.cnblogs.com/ljhdo/p/4629891.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!