HTML5技术

30分钟全面解析-SQL事务+隔离级别+阻塞+死锁 - jackson0714(5)

字号+ 作者:H5之家 来源:H5之家 2016-07-06 11:00 我要评论( )

(2)在获得共享锁的事务完成之前,没有其他事务能够获得排他锁修改这一数据资源,且当其他事务增加能够满足当前事务的读操作的查询搜索条件的新行时,其他事务将会被阻塞,直到当前事务完成然后释放共享锁,其他事

(2)在获得共享锁的事务完成之前,没有其他事务能够获得排他锁修改这一数据资源,且当其他事务增加能够满足当前事务的读操作的查询搜索条件的新行时,其他事务将会被阻塞,直到当前事务完成然后释放共享锁,其他事务才能获得排他锁进行插入操作。

(3)事务中的读操作在任何情况下读取到的数据是一致的,不会出现幻影行。

(4)范围锁:读操作锁定满足查询搜索条件的整个范围的锁

 

5.隔离级别总结

 

隔离级别 是否读取未提交的行 是否不可重复读 是否丢失更新 是否幻读 共享锁持续时间 是否持有范围锁

未提交读 READ UNCOMMITTED Y Y Y Y 当前语句 N

已提交读 READ COMMITTED N Y Y Y 当前语句 N

可重复读REPEATABLE READ N N N Y 事务开始到事务完成 N

可序列化SERIALZABLE N N N N 事务开始到事务完成 Y

 

 

  四.死锁

死锁是指一种进程之间互相永久阻塞的状态,可能涉及两个或更多的进程。

打开两个查询窗口,Connetion1,connection2

Step1: 执行Connection1的SQL 语句

Step2: 执行Connection2的SQL 语句

 

执行语句 事务  执行语句

Connetion1 A

SET TRANSACTION ISOLATION LEVEL READ COMMITTED BEGIN TRAN UPDATE dbo.myProduct SET price = price + 1 WHERE id=1 SELECT * FROM dbo.myOrder WHERE id =1

Connection2 B

SET TRANSACTION ISOLATION LEVEL READ COMMITTED BEGIN TRAN UPDATE dbo.myOrder SET customer = 'ddd' WHERE id = 1 SELECT * FROM dbo.myProduct WHERE id = 1

 

 

 

 

 

 

 

两个事务的流程图:

阶段1:Price=10,事务A对myProduct表请求排他锁。Customer = aaa,事务B对myOrder请求排他锁

阶段2:事务A对myProduct表使用了排他锁,更新price = price + 1。然后事务B对myOrder表使用了排他锁,更新customer=ddd。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 30分钟掌握 C#7 - 雨夜潇湘

    30分钟掌握 C#7 - 雨夜潇湘

    2017-04-10 14:08

  • URL解析 - 妙音天女

    URL解析 - 妙音天女

    2017-03-27 16:02

  • 开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    2017-03-22 13:00

  • 30分钟搞定后台登录界面(103个后台PSD源文件、素材网站) - 张果

    30分钟搞定后台登录界面(103个后台PSD源文件、素材网站) - 张果

    2017-03-21 10:00

网友点评
e