一、事务

1、事务的四大特性ACID是什么?

原子性
一个事务中的操作要么全部成功,要么全部失败。

通过 undo log 来实现
隔离性
一个事务的修改在最终提交前,对其他事务是不可见的。

通过 读写锁+MVCC来实现
持久性
一旦事务提交,所做的修改就会永久保存到数据库中。

通过 redo log 来实现
一致性
通过 原子性、隔离性、持久性来保证
数据库必须要实现AID三大特性,才有可能实现一致性。同时 一致性也需要应用程序的支持

2、ACID靠什么保证的?

3、什么是脏读、幻读、不可重复读

4、什么是MVCC

原理:

MVCC(Multi-Version Concurrency Control,多版本并发控制

MVCC通过维护数据的多个版本来实现并发控制。每个版本与一个事务关联,让不同的事务看到不同时间点的数据视图,从而避免了大部分的锁等待,提高了并发性能,保证事物的一致性和隔离性。

InnoDB中的MVCC实现步骤:

第一步:分配事物id; 第二步:根据事物id创建讯视图,确定哪些版本对当前事物可见; 第三步:创建新版本数据,将旧版本数据写入到undolog; 第四步:提交时使用redolog日志写入到磁盘,回滚时使用undolog日志恢复到之前的状态;

关键概念:

版本管理:每个事物开始会创建一个版本记录,并分配一个事物id,记录上有隐藏字段事物id和回滚指针

读视图:事物开始时会创建一个读实图,确定哪些版本的数据对当前事物可见

 日志:undolog用于储存事物在提交前的变化,这样可以回滚到之前的版本。redolog用于持久化数据页的变化,确保在奔溃后可以恢复数据。

5、Innodb是如何实现事务的?

MySQL采用的是 WAL(Write-ahead logging, 预写式日志)机制来实现的
在使用WAL的系统中, 所有的修改都先被写入到日志中,然后 再被应用到系统中。通常包含 redo和undo两部分信息。
在 重启之后系统可以通过比较日志和系统状态来决定是 继续完成操作还是撤销操作。以一个update语句为例:

(1)Innodb在收到一个update语句后,会先根据条件找到数据所在的页,并将该页缓存在Buffer Pool中
(2)执行update语句,修改Buffer Pool中的的数据,也就是内存中的数据。
(3)针对update语句生成一个RedoLog对象,并存入LogBuffer中。
(4)针对update语句生成undoLog日志,用于事务回滚。
(5)如果事务提交,那么则把RedoLog对象进行持久化,后续还有其他机制把Buffer Pool中所修盖的数据页持久化到磁盘。
(6)如果事务回滚,则利用undolog日志进行回滚。

二、存储引擎

1、InnoDB和MyISAM的区别

三、索引

1、什么是索引覆盖?

2、什么是最左前缀原则?

3、什么是回表?

4、mysql聚簇和非聚簇索引的区别?

5、什么情况会导至索引失效?

6、Mysql的索引结构是什么样的?

7、B树和B+树的区别

8、什么是索引下推?

9、索引优点和缺点

四、锁

1、mysql锁有哪些,如何理解?

2、update是加行锁还是表锁?

3、Explain中各字段分别表示什么?

 

五、日志

1、mysql是有哪几种日志?作用分别是什么?