一、事务
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是有哪几种日志?作用分别是什么?
标签:事务,索引,事物,update,夺命,版本,mysql,100,日志 From: https://www.cnblogs.com/zhengwei-cq/p/18365011