重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

MySQL 幻读怎么解决?

时间:2020-09-23 22:40:08 作者:重庆seo小潘 来源:
MySQL 幻读怎么解决? 1、MVCC快照,将历史数据存一份快照,在其事务增加与删除数据时,保证当前事务来说是不可见的; 多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。 以 InnoDB 为例,每一行中都冗余了两个字断。一个是行的创建版本

MySQL 幻读怎么解决?

MySQL 幻读怎么解决?

1、MVCC快照,将历史数据存一份快照,在其事务增加与删除数据时,保证当前事务来说是不可见的;

多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。

以 InnoDB 为例,每一行中都冗余了两个字断。一个是行的创建版本,一个是行的删除(过期)版本。版本号随着每次事务的开启自增。事务每次取数据的时候都会取创建版本小于当前事务版本的数据,以及过期版本大于当前版本的数据。

普通的 select 就是快照读。select * from T where number = 1;2、“next-key”锁,将当前数据行与上一条数据和下一条数据之间的间隙锁定,保证此范围内读取的数据是一致的。

next-key 锁包含两部分

记录锁(行锁)

间隙锁

记录锁是加在索引上的锁,间隙锁是加在索引之间的。(思考:如果列上没有索引会发生什么?)select * from T where number = 1 for update;select * from T where number = 1 lock in share mode;insertupdatedelete推荐教程:《MySQL教程》以上就是MySQL 幻读怎么解决?的详细内容,更多请关注小潘博客其它相关文章!