码迷,mamicode.com
首页 > 其他好文 > 详细

了解锁及上锁时长

时间:2016-01-21 12:23:41      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:   隔离级别   锁时长   

锁多并发排他访问的时候产生,所以锁和事务特性中的隔离性关系密切.隔离级别哪大致分四种.

  1. 读未提交

  2. 读已提交

  3. 可重复读

  4. 可序列化

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

那么就一起讨论一下共享锁在这四个隔离级别下是如何上锁的.

  1. 读未提交: 顾名思义,别人没有提交我能读,哪我读取的时候不加共享锁呗,读脏(脏数据和脏数据页是完全不同的两个概念, 胀数据是既没有提交也没有回滚的数据,中间状态,胀数据页是在内存中还没有redo到磁盘的数据,当checkpoint被触发时会批量写入磁盘,然后在页头标记为干净).

  2. 读已提交: 顾名思义,别人提交了我才能读,那么我读取的时候是加共享锁的, 但是共享锁是读取一条释放一条,这个锁不会持续到时候的结束.

  3. 可重复读: 顾名思义,可以重复读取吗, 既然在一个事务内我可以重复读取,其实意识就是在一个食物内多次读取的数据是一样的,那么这个共享锁是持续到事务结束..从start--commit 这段时间内共享锁一直持有,所以其他人修改不掉,才会多次读取一直.

  4. 可序列化: 如一张表主键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 ,如果堆表这个隔离级别读取的时候就会加表锁.

本文出自 “新乐” 博客,请务必保留此出处http://xinle.blog.51cto.com/1935834/1736981

了解锁及上锁时长

标签:   隔离级别   锁时长   

原文地址:http://xinle.blog.51cto.com/1935834/1736981

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!