美文网首页
InnoDB-锁

InnoDB-锁

作者: 一只小星_ | 来源:发表于2019-08-26 22:30 被阅读0次
  • 什么是一致性非锁定读,MVCC?
  • 什么是一致性锁定读
  • 行锁的三种算法

1.什么是一致性非锁定读?

一致性非锁定读是指InnoDB存储引擎通过行多版本控制的方式来读取当前执行时间数据库中行的数据,如果读取的行正在进行delete/update操作,读取不回因为有排他的行锁就等待,而是去读取行的快照数据。
快照数据是该行之前版本的数据,实现是通过undo字段来完成。这是InnoDB默认的读取方式,但是在不同的数据隔离级别下,读取的方式不同,并不是在每个事务隔离级别下都是采用非锁定的一致性读,即使采用了,对于数据快照的定义也不同。
那么,快照数据其实就是当前行的数据之前的历史版本,每行记录可能有多个版本,一行可能有不止一个快照数据,一般称这种技术为行多版本技术,由此带来的并发控制,叫做多版本并发控制(MVCC)。
在事务隔离级别:读提交、可重复读中,虽然都使用一致性非锁定读,但是对于数据快照的定义是不一样的,在读提交中,每次读取的是行的最新一份快照数据,比如你在一个读取事务里面,读了两次,可能中间这个记录被删掉了,那你第二次读的时候这个数据就不存在了。但是,可重复读的话,它读取的是读取这个事务开始的行数据版本,如果这个读取事务没有结束,中间有人来更新了删掉了,但再次读取的话还是和第一次读取的数值一样,注意是同一个读事务。

2.什么是一致性锁定读?

某些情况下,需要强制读取的一致性,就需要加锁了
select ... for update对读取的行记录加一个X锁
select ... lock in share mode 对读取的行记录加S锁

3.行锁的三种算法

1、Record Lock 单个行记录上的锁
锁的是索引,如果这行没索引,那就会用隐式的主键进行锁定,
2、间隙锁
锁定一个范围,但不包含记录本身。
3、Next-Key Lock
间隙锁➕单个行记录上的锁两者结合,锁定一个范围,并且锁定记录本身。InnoDB都是采用这种算法锁定。

如果事务T1已经通过Next-Key Lock锁定了下面范围:
(10,11]、(11,13]
当插入新的记录12时,锁定范围会变成下面:
(10,11]、(11,12]、(12,13]

但是,如果查询的索引有唯一属性,就会把next-key-locks降级,变成Record Lock,仅锁住索引本身,而不是范围,这也只是在select * from t where
a = 5的情况,只能是在判断相等的时候。
但如果索引没有唯一约束,而查询又是等于的情况,比如select * from t where
a = 5,那么不仅会锁上a=5,如果a的值除了5还有1和7,那么同时也会锁上(1,5),(5,7)这两个范围。

3.1 RR隔离级别怎么避免的幻读

比如你 select * from table where a > 2 for update,那锁住的不仅是大于2的每一行,而是对于2到正无穷这个范围加X锁,在这个范围内的任何插入都是不允许的,避免幻读。

https://juejin.im/post/5d5671a2e51d45620821cea7

相关文章

  • InnoDB-锁

    什么是一致性非锁定读,MVCC? 什么是一致性锁定读 行锁的三种算法 1.什么是一致性非锁定读? 一致性非锁定读是...

  • Innodb-行锁

    基本概念 脏读是指读到别的事务未提交的修改。不可重复度读与幻读的区别,不可重复读的重点在于update和delet...

  • InnoDB-索引

    四、索引 mysql支持的常见索引:B+,全文、hash 1.B+树索引 B+树索引可以分为聚簇索引和非聚簇索引。...

  • InnoDB-索引

    这个索引真的是面试必考题,但是我也不知道面试官问这玩意有啥用,回答都是百度的,问一百个人,90个人回答的一样,剩下...

  • InnoDB-索引页(数据页)

    页是什么? 页是innoDB中管理储存空间的基本单位,页有很多中,存放数据的叫做索引页。其他先不说。 先说说插入一...

  • 锁锁锁锁锁锁锁锁锁锁锁锁锁锁锁

  • 又锁锁锁锁锁锁锁锁锁锁锁锁锁锁锁

    公号见

  • 锁锁锁锁锁

    大家看看,写了个昨天的后续,解释了一下不能任性,不然对身体健康很不好。 然后通过这个事情,说道但国外受灾,粮食短缺...

  • 关门七件事

    锁 锁 锁 锁 锁 锁 锁

  • 锁 锁不锁 锁 什么时候锁 喜欢就锁 不喜欢还锁 旧文锁不锁 锁 新文锁不锁 锁 左锁右锁都是锁 爱国情怀锁 轻松...

网友评论

      本文标题:InnoDB-锁

      本文链接:https://www.haomeiwen.com/subject/ukccectx.html