在MySQL中读取数据有两种方式,一种是当前读,另一种是快照读,理解这两种读取数据的方式有助理解更多MySQL相关锁的知识。
当前读当前读,顾名思义就是读取当前最新的数据,并且对读取的数据加锁,阻止其他事务同时修改相同的记录,避免出现安全问题。
下面这些场景会使用当前读:
- update、delete、insert
- select … lock in share mode (主动加共享锁)
- select … for update (主动加排他锁)
A consistent read means that InnoDB uses multi-versioning to present to a query a snapshot of the database at a point in time.
一致读取意味着InnoDB使用多版本控制在某个时间点向查询提供数据库的快照,也可以简称为快照读。
相关说明:
- InnoDB在隔离级别读已提交级别和可重复读级别上使用
- 一致读不会在访问的表上加任何锁,其他会话可以同时修改表上的数据。
- 读已提交级别下,每次select都会生成一个快照。
- 可重复读级别下,开启事务之后第一个select才会生成快照,而不是事务一开始就生成快照。
快照读的实现方式通过多版本控制MVCC机制实现,感兴趣的小伙伴可以去了解。
小结- 可以简单理解需要加锁的是当前读,快照读不需要加锁。
- 快照读意味每次读取的都是快照,快照意味数据相同。
- 快照读通过MVCC实现。
- 快照读在读已提交隔离级别和可重复读隔离级别都有。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)