MySQL高频面试题
1. 什么是MVCC?
M VCC 多版本并发控制,是乐观锁的一种实现方式,可以做到读不加锁,读写不冲突,解决读-写冲突的无锁并发控制。注意:MVCC 只在 Read Commited 和 Repeatable Read 两种隔离级别下工作。
1、快照读:简单的select操作,不需要加锁,基于MVCC和undo log来实现的,读取的是记录的可见版本(有可能是历史版本)。
2、当前读:特殊的读操作,需要加锁,是悲观锁的实现,读取的是记录的最新版本,并且当前读返回的记录,都会加锁,保证其他事务不会再并发修改这条记录。当前读的场景如下:
- insert/update/delete
- select …for update
- select … lock in share mode
2. MVCC 解决的问题是什么
MVCC 是一种用来解决读写冲突的无锁并发控制,也哭是为事务分配单项增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照,所以 MVCC 可以为数据库解决以下问题:
- 在并发读写数据库时,可以做到读操作时不阻塞写操作,写操作也不阻塞读操作,提高了数据库并发读写的性能。
- 解决脏读、幻读、不可重复读等事务隔离问题,但是不能解决更新丢失