1. 事务的ACID特性,如何实现,几个特性之间的关系
什么是事务?
事务的四个特性,ACID, 原子性,一致性,隔离性,持久就
2
. 几种并发不一致
产生并发不一致性问题主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性
丢失修改
T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。
一级封锁协议
事务 T 要修改数据 A 时必须加 X 锁,直到 T 结束才释放锁。
读脏数据
T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。
二级封锁协议
在一级的基础上,要求读取数据 A 时必须加 S 锁,读取完马上释放 S 锁。
可以解决读脏数据问题,因为如果一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据
不可重复读
T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
三级封锁协议
在二级的基础上,要求读取数据 A 时必须加 S 锁,直到事务结束了才能释放 S 锁。 可以解决不可重复读的问题,因为读 A 时,其它事务不能对 A 加 X 锁,从而避免了在读的期间数据发生改变。
幻影读
T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次 读取的结果不同。
3
. 隔离级别 不同隔离级别的并发不一致 (针对隔离性提出来的)
读未提交
读提交
可重复读
串行化
MySQL默认是可重复读。
4
. mysql的逻辑架构 一条语句的执行路径
5
. explain的字段
6
. mysql调优 索引的创建使用
联合索引
7
. InnoDB的行锁
8
. 意向锁
9
. MVCC 原理 解决了什么问题
10
. SQL 与 NoSQL 的比较
11
. mysql 连接
12
. 索引和B+树 原理优势
13
. 红黑树 概念
14
. 存储引擎的比较
InnoDB和MyISAM,前者是最新的,后者是旧的,所以下面的答案前面支持,后面不支持
是否支持行锁
是否支持外键
是否支持MVCC
InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
15
. 主从复制,读写分离 过程
分布式部署。
16
. 分表 水平切分垂直切分
17
. mysql用的什么协议 有状态还是无状态
18
. innoDB的架构
19
. join 的底层原理
20
. innoDB索引计算