SQL Server 浅谈事务的ACID

简介
事务(transaction)所应该具有的四个特性:
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

理解原子性

事务执行是作为原子, 整个语句要么执行,要么不执行
每一个单独的语句都可以看作是默认包含在一个事务之中

想要自己定义原子的大小,则需要包含在事务中来构成用户自定义的原子粒度 

理解一致性

即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏( 其内部数据永远是正确的
数据库层面的一致性是,在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,Check约束等)和触发器设置.

理解隔离性(Isolation)

事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据
事务之间的互相影响的情况分为几种,分别为:脏读,不可重复读,幻读

脏读
    脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的

不可重复读(Unrepeatable Read)

     一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的

 

幻读(phantom read)
     指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样(即两个事务同时对同一个表进行DML操作,造成结果混乱

理解SQL SERVER中的隔离级别
为了避免以上出现的几种情况,SQL Sever 提供了几种隔离级别供用户自行设置,隔离级别越高,需要用到更多的锁,造成性能下降,隔离效果更好。 不过默认的隔离等级Read Commited符合了99%的实际需求
    Read Uncommited(最高的性能,但可能出现脏读,不可重复读,幻读)
    Read commited(可能出现不可重复读,幻读)
    Repeatable Read(可能出现幻读)
    Serializable(最低的性能,Range锁会导致并发下降)
    SNOPSHOT(这个是通过在tempDB中创建一个额外的副本来避免脏读,不可重复读,会给tempDB造成额外负担,因为不是标准ANSI SQL标准,不详细讨论)

 

理解持久性
意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值