事务

  作用:用来执行一连串的动作,并且保证所有动作要么都执行、要么都不执行。

  属性:原子行、一致性、隔离性、持久性

  作用:SqlServer使用锁来实施事务隔离属性。

阻塞

  定义:如果一个事务持有一数据资源的锁,而另一事务请求相同资源的不兼容的锁,则新锁的请求将被阻塞。

     默认情况下,被阻塞的请求会一直等待,直到原来的事务释放相关的锁。

事务的隔离级别

  可设置的有6个(从上往下 隔离级别越来越高):

          1、read uncommitted

          2、read committed

          3、repeatable read

          4、serializable

          5、snapshot

          6、read committed snapshot

  其中前面四个级别最常用

1、read uncommitted 脏读

例如A某正在执行如下语句:

begin tran

insert tbUnRead 

select 3,'张三'

union

select 4,'李四'

---延迟秒,模拟真实交易情形,用于处理业务逻辑

waitfor delay '00:00:05'

rollback tran

此时,在等待的5秒内,B某恰好对该资源做了修改:

set Transaction isolation level read uncommitted

--查询数据

select * from tbUnRead where name like '张%'

本来A某要插入两条数据,但是最后事务回滚了,此时数据库应该不存在这两条数据,但是B某却读取到了,这就是脏读。

要解决这个问题,就需要将事务隔离级别提升到read committed

2、read committed  不可重复读(避免脏读的最低级别)

假如A某正在执行如下操作:

set Transaction isolation level read committed

begin tran

select * from tbUnRead  where ID=2 

---延迟秒,模拟真实交易情形,用于处理业务逻辑

waitfor delay '00:00:05'

select * from tbUnRead  where ID=2

此时,在等待的5秒内,B某恰好对该资源做了修改:

update tbUnRead

set name='Jack_upd'

where ID=2

这样产生的结果是,在同一个事务内,两次条件相同的查询会有不同的结果。

要解决这个问题,就需要将事务隔离级别提升到repeatable read

3、repeatable read 幻读

假如A某在执行如下操作:

set Transaction isolation level REPEATABLE READ

begin tran

select * from tbUnRead  where ID=3 

---延迟秒,模拟真实交易情形,用于处理业务逻辑

waitfor delay '00:00:05'

select * from tbUnRead  where ID=3 

commit tran

此时,在等待的5秒内,B某恰好对该资源做了修改:

INSERT tbUnRead
select 3,'幻读'

此时,A某已经把隔离级别设置为“可重复读”,虽然是曾经读取的数据,不管是共享锁还是互斥锁都 保留到了事务结束,但是无法阻止其他人运行新增操作,导致第一次查询时没有数据,第二次查询时却有了数据,这种现象被称为幻读。

要解决这个问题,就需要将事务隔离级别提升到serializable

SqlServer中的事务隔离级别、锁机制的更多相关文章

  1. MySQL事务及事务隔离级别 锁机制

    什么是事务? 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态更改为另一个一致性状态,这样的操作过程就是事务.事务具有的AC ...

  2. 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系

    重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...

  3. Innodb中的事务隔离级别和锁的关系(转载)

    nodb中的事务隔离级别和锁的关系 原文:https://tech.meituan.com/innodb-lock.html ameng ·2014-08-20 15:50 前言: 我们都知道事务的几 ...

  4. 【转载】Innodb中的事务隔离级别和锁的关系

    前言 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所 ...

  5. Sql Server中的事务隔离级别

    数据库中的事物有ACID(原子性,一致性,隔离性,持久性)四个特性.其中隔离性是用来处理并发执行的事务之间的数据访问控制.SqlServer中提供了几种不同级别的隔离类型. 概念 Read UnCom ...

  6. 在MySQL中设置事务隔离级别有2种方法:

    在MySQL中设置事务隔离级别有2种方法: 1 在my.cnf中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED 2 ...

  7. Innodb中的事务隔离级别和锁的关系

    前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...

  8. Innodb中的事务隔离级别和锁的关系(转)

    原文:http://tech.meituan.com/innodb-lock.html 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库 ...

  9. MySQL InnoDB中的事务隔离级别和锁的关系

    前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...

随机推荐

  1. J2EE进阶(九)org.hibernate.LazyInitializationException: could not initialize proxy - no Session

    org.hibernate.LazyInitializationException: could not initialize proxy - no Session 前言 在<many-to-o ...

  2. iOS中 本地通知/本地通知详解 韩俊强的博客

    布局如下:(重点讲本地通知) iOS开发者交流QQ群: 446310206 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 Notification是智能手机应用编 ...

  3. Mybatis执行CachingExecutor(六)

    前面几篇博客我们介绍了Excutor及抽象类BaseExecutor和实现类SimpleExecutor.BatchExecutor和ReuseExecutor: 博客列表: Mybatis执行Exe ...

  4. UNIX环境高级编程——sigqueue、sigsuspend函数

    一.sigqueue函数 功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用. int sigqueue(pid_t pid, int sig, ...

  5. 尚学堂马士兵struts2 课堂笔记(一)

    06_尚学堂马士兵_Struts2_Struts2_HelloWorld_5 <constant name="struts.devMode" value="true ...

  6. java的制作"时间账本"

    一直以来我都感觉自己的时间过得好荒废啊,貌似只是打开了一个网页链接的时间,一个下午便过去了:仿佛就是看了看空间,刷了刷微信,一天就过去了.哈,当然这是夸张的说法.但是我仔细地算了一下,大概我们每个人每 ...

  7. 内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)-----小知识解决大数据攻略

    早就听说了内连接与外连接,以前视图中使用过.这次自考也学习了,只是简单理解,现在深入探究学习(由于上篇博客的出现)与实践: 概念 关键字: 左右连接 数据表的连接有: 1.内连接(自然连接): 只有两 ...

  8. R12 - Error 'Unable to process your transaction. The operating unit is either invalid or it cannot b

    In this Document   Symptoms   Cause   Solution   Still Have Questions?   References APPLIES TO: Orac ...

  9. Protobuf-java maven配置

    Protobuf-java maven配置 1. maven pom片断 <!-- protobuf-java for maven plugin http://stackoverflow.com ...

  10. ffdshow 源代码分析 9: 编解码器有关类的总结

    ===================================================== ffdshow源代码分析系列文章列表: ffdshow 源代码分析 1: 整体结构 ffds ...