ACID靠什么保证
A 原子性 由undo log日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经成功执行的sql
C 一致性 通过其它三大特性保证,程序代码要保证业务上的一致性
I 隔离性 由MVCC保证
D 持久性 由内存+redo log保证,mysql修改数据同时在内存和redo log记录这次操作,宕机的时候可以从redo log恢复
InnoDB redo log写盘,InnoDB事务进入prepare状态
如果前面的prepare成功,bin log写盘,再继续将事务日志持久化到binlog,如果持久化成功, 那么InnoDB事务则进入commit状态(在redo log里面写一个commit记录)
mysql事务原理
当进行数据修改操作时,例如插入、更新或删除记录,MySQL 会将原始数据的副本记录在undo log
中。如果事务需要回滚,MySQL 可以通过读取undo log
中的信息,将数据还原到之前的状态
undolog redolog binlog
undo log
用于记录数据的变更信息,在事务执行过程中,如果需要回滚操作,MySQL 可以根据undo log
中的记录将数据恢复到之前的状态。
redo log
主要用于恢复数据,它记录了数据页的修改信息。当 MySQL 崩溃或需要重新启动时,redo log
可以帮助数据库恢复到崩溃前的状态,确保数据的完整性。
binlog
则用于记录数据库的所有更改操作,通常用于数据备份、主从复制等场景。通过binlog
,可以将主数据库的更改同步到从数据库,实现数据的分发和高可用性。
B树和B+树的区别
B树的特点
- 节点排序
- 一个节点可以存储多个元素,多个元素也排序
B+树的特点
拥有B树的特点
- 叶子节点之间有指针
- 非叶子节点的元素在叶子节点都冗余了,也就是叶子节点存储了所有的数据,并且排好序
mysql索引使用的时B+树,因为索引是用来加快查询的,而B+树通过对数据进行排序所以可以提高查询速度,然后通过一个节点存储多个元素,从而使B+树高度不会太高,通过叶子节点存储了所有的数据并且进行了排序,并且叶子节点之间有指针,可以很好的支持全表扫描,范围查找等sql语句
B+树是一种在非叶子节点存放排序好的索引而在叶子节点存放数据的数据结构。在B+树中,非叶子节点不存储具体的数据,只存储索引信息,而叶子节点包含了所有的数据和索引。
Mysql有哪些锁
行锁 锁某行数据,锁粒度最小,并发度高
表锁 锁整张表,锁粒度最大,并发度低
间隙锁 锁的是一个区间
Explain表达式每个字段表示什么意思
id
:select 查询的序列号,表示查询中执行select
子句或者是操作表的顺序。select_type
:表示SELECT
的类型,常见的取值有SIMPLE
(简单表,即不使用表连接或者子查询)、PRIMARY
(主查询,即外层的查询)、UNION
(UNION
中的第二个或者后面的查询语句)、SUBQUERY
(SELECT
/WHERE
之后包含了子查询)等。type
:表示连接类型,性能由好到差的连接类型为NULL
、system
、const
、eq_ref
、ref
、range
、index
、all
。possible_keys
:显示可能应用在这张表上的索引,一个或多个。key
:实际使用的索引,如果为NULL
,则没有使用索引。