对于事务隔离级别的一些疑问

minhua1983 2018-12-04 09:54:25
我知道事务有4种基本的事务隔离级别,来解决脏读,不可重复读,幻读的问题。
网上找了些资料,对这些内容也大致有些了解了,但是我不理解为啥各种不同的事务隔离级别可以分别解决上面这3个问题(也就是知其然,不知其所以然)。
现在我大致有了点头绪(基于之前看了一篇文章说道锁也有生命周期的,不同隔离级别下,共享锁和排它锁的的生命周期还不一样,但是也只是大致提了一下,每具体说),应该是和共享锁和排它锁的生命周期相关,也就是不同的事务隔离级别,共享锁和排它锁的生命周期也不同,但是网上百度相关文章较少,公司有没条件上google,也就没办法自己去验证自己的观点,因此来这里请教。

我的观点如下:

READ UNCOMMITTED,共享锁是执行完即释放,排它锁是执行完即释放。
READ COMMITTED,共享锁是执行完即释放,排它锁是事务处理完才释放。
REPEATABLE READ,共享锁是事务处理完才释放,排它锁是事务处理完才释放。
SERIALIZABLE,共享锁是事务处理完才释放,排它锁是事务处理完才释放。

麻烦帮我看下,我这样理解有什么问题么?

...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2018-12-07
  • 打赏
  • 举报
回复
隔离级别的是查询(读)的不同反应(如果你在查询时显式加锁,已经在一定程度上改变了查询的行为,从而得到与当前事务隔离级别不同的效果,另外,在SQL Server中,还要考虑 SNAPSHOT 设置的影响)
READ UNCOMMITTED
查询的时候不加锁,所以可以读取任何可读到的数据
READ COMMITTED
对查询的数据加 S (共享锁,锁的释放时间是查询结束
REPEATABLE READ
与前一个类似,只是锁的释放时间是事务结束 (所以查询不在事务顺的话,它与前一个是一样的)
SERIALIZABLE
与前一个类似,但加锁的范围改变了(范围处于与事务中执行的每个语句的搜索条件相匹配的键值范围之内)
薛定谔的DBA 2018-12-06
  • 打赏
  • 举报
回复
========================================== 锁是锁,事务是事务,不能用锁来阐述事务隔离级别,比如: begin tran select 1 commit tran 这也是一个事务,但隔离级别也是可以任意设置(SET TRANSACTION ISOLATION LEVEL)。 参考我以前的文章:SqlServer 并发事务(一):事务隔离级别 ==========================================
唐诗三百首 2018-12-06
  • 打赏
  • 举报
回复
不太正确喔, 无法一一纠正, 建议不要用锁的生命周期进行对比.应该关注锁的原理和并发控制.
其实有办法自己去验证自己的观点, 除了理论学习, 建议也多做实验验证.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧