mvcc全称(Multiversion concurrency control),是为了解决数据库的事务操作中的多线程并发安全问题的无锁并发控制技术。
为什么需要mvcc
需要从三个场景出发 读读并发,读写并发,写写并发。
- 读读并发,不会产生并发问题,也不需要并发控制
- 读写并发,会造成事务隔离性问题,脏读,幻读和不可重复读的问题。
- 写写并发,可能出现数更新丢失的问题。
mvcc相当于是为了修改保存一个版本,版本与事务时间戳关联,读操作只读事务开始前的数据库的快照。它是通过数据库记录中的隐式字段Undo日志,ReadView来实现的。
什么是脏读
脏读指的是读到其他事务未提交的数据。未提交的数据有可能因其他问题回滚,导致数据库不存在这条数据。
什么是不可重复读
不可重复读是指在一个事务中多次读取到同一数据不一致
什么是幻读
幻读是指验证数据库是否存在数据,不存在时准备插入之时,其他事务已经插入数据了,本次事务插入数据就失败了。
解决的问题
- 在并发读写数据库时,提高数据库的并发读写的处理能力
- 实现读一致性,解决脏读,幻读,不可重复读等事务隔离问题。
- 采用乐观锁或者悲观锁用来解决写和写的冲突