简析每个隔离级别下共享锁持续时长

锁:多并发排他访问的时候产生,

所以锁和事务特性中的隔离性关系密切.


四种隔离级别:

读未提交

读已提交

可重复读

可序列化

排他锁:为了保证事务的完整一致, 排他锁都是持续到事务结束的..

共享锁加锁机制

读未提交:

顾名思义,别人没有提交我能读,哪我读取的时候不加共享锁呗,

读脏(胀数据是既没有提交也没有回滚的数据,中间状态数据页是在内存中还没有redo到磁盘的数据,

当checkpoint被触发时会批量写入磁盘,然后在页头标记为干净).

读已提交:

顾名思义,别人提交了我才能读,那么我读取的时候是加共享锁的,

但是共享锁是读取一条释放一条,这个锁不会持续到事务结束.

可重复读:

顾名思义,可以重复读取吗,

既然在一个事务内我可以重复读取,其实意识就是在一个事务内多少此都一致,

那么这个共享锁是持续到事务结束..从start--commit 这段时间内共享锁一直持有,

所以其他人修改不掉,才会多次读取一致。

可序列化:

如一张表主键id 1,2,3 3条数据我想在2-3之间插入一个2.5,

如果现在有人查询select count(1) from tbname where id>=1 and id<=3时,

是不允许的,因为这个隔离级别上的是范围锁这段时间不但数据不能修改, 这一段范围也不能插入新的数据..

所以一个事务内count多少次都是3条数据, 如果这个表没有主键,没有聚集建怎么上范围所, 堆表无逻辑概念 ,

存放的就是物理位置 fileid:pageid:slotnumber ,如果堆表这个隔离级别读取的时候就会加表锁.


以上概述只限SQLSERVER 数据库, mysql,postgresql采取的是乐观并发, 默认读老版本数据。

所以他的读已提交默认读取的是行的老版本、

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并...
    CodeKing2017阅读 636评论 0 7
  • 当一个系统访问量上来的时候,不只是数据库性能瓶颈问题了,数据库数据安全也会浮现,这时候合理使用数据库锁机制就显得异...
    初来的雨天阅读 3,611评论 0 22
  • 一、事务 1、事务四要素:ACID 对于事务,我之前的理解是很粗糙的,不就是为了保证操作的原子性么?一般订单系统或...
    张伟科阅读 1,361评论 0 5
  • 您的时间已不足!!!您的时间已不足!!!您的时间已不足!!!重要的事情说三遍!!!马上就要2018年了,您,做好...
    凛翊阅读 88评论 0 0
  • 从梦中醒来 忽听阵阵雨声 喜欢雨 温柔了时光 对岸的灯火在雨里摇曳 伴随闪过天际的霞光 夜雨四月 恰似你的到来...
    z云淡风轻阅读 218评论 1 0