文章的目的主要是针对面试官的提问,做出尽可能精简而全面的回答。若读者对某块的知识不能太理解,还请参阅其他大佬比较详细的博客或者专业书籍,谢谢大家。
一.MySQL的存储引擎
1.InnoDB:
2.MyISAM:
3.Memory:
4.Archive:
二、事务的ACID
1.原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中所有的操作要么全部提交成功,要么全部失败回滚,对一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。
2.一致性(consistency):事务前后数据的完整性保持一致。
3.隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务通常是不可见的。
4.持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。
三、事务的隔离级别
1.READ UNCOMMITTED (未提交读):一个事务可以读取另一个未提交事务的数据,这也称为脏读。
2.READ COMMITTED (提交读):一个事务要等另一个事务提交后才能读取数据。但会出现一个事务范围内两个相同的查询却返回了不同的数据,称为不可重复读。
3.REPEATABLE READ (可重复读):在开始读取数据(事务开启)的时候,不允许修改操作。可重复读可以解决不可重复读问题。不可重复读对应的是修改即update操作,但是可能有幻读问题,因为幻读问题对应的是插入insert操作,而不是update操作。
幻读:当某个事务在读取某个范围内记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围记录时,会出现换行。
4.SERIALIZABLE (可串行化):最高的隔离级别,该级别下事务串行化顺序执行,可以避免脏读、不可重复读和幻读。但是效率低下,比较耗数据库的性能,会在读取的每一个行都加锁,所以会导致大量的超时和锁争用的问题。
四、多版本并发控制(MVCC)解决幻读问题
持续更新!!!!!觉得如果有帮助到你,麻烦评论喜欢加关注哟。
网友评论