**
题目一
**
MyISAM和InnoDB的区别,什么时候选择MyISAM?
参考回答
InnoDB是目前MySQL主流版本(5.6、5.7、8.0)默认的存储引擎,支持事务、外键、行级锁,对于并发条件下要求数据的一致性,适用于对数据准确性要求高的场景。
MyISAM只支持表级锁、数据排列是按照插入顺序,没有做规则排序。适合应用以查询和插入为主,只有很少量的更新和删除操作,对事务的完整性和并发性要求不是很高的场景。
实际运用
看到很多人在选择存储引擎的时候会无脑的选择InnoDB,这个选择合理的一点是如果对数据准确性要求没有那么高,直接用NoSQL就好了。用MySQL就是为了可靠啊。
但是实际工作中,我设计的数据库中通常都会有几张MyISAM的数据表,通常用来存储历史记录,与使用InnoDB存储实时记录信息的配合使用。
举个例子:比如一条物流信息,在实时的表里存着目前物流的状态:比如配送中。这条物流在历史上经过了:正在通知快递公司取件、XXX已收揽等,这张记录表基本只有插入和查询,并且丢失一个中间状态不影响当前结果,这就很合适用MyISAM。
题目二
简述MySQL的MVCC多版本并发控制
参考回答
MVCC是对于事务隔离级别的读已提交RC和可重复读RR,基于乐观锁的实现。在LBCC(基于锁的并发控制)RC、RR和串行化分别是通过加行锁、间隙锁和表锁来基于悲观锁实现。而乐观锁的