目录

  • 数据库常用的两种引擎
  • 两种引擎差异对比
  • 如何选择引擎
  • 两个引擎索引结构
  • 查找mysql数据存储位置方式
  • MyISAM
  • InnoDB
  • 1. 非独立表空间
  • 2. 独立表空间
  • 3. idb文件存的哪些内容
  • 4. 如何判断是否是独立表空间
  • 聚簇索引&非聚簇索引
  • 两种引擎查找流程
  • B树和B+树的区别
  • B树的结构
  • 索引两种类型
  • 脏读、幻读、不可重复读
  • 脏读
  • 幻读
  • 不可重复度
  • 四大隔离机制
  • 读取未提交
  • 读取已提交(Oracle 默认)
  • 可重复读(mysql默认)
  • 串行

数据库常用的两种引擎

InnoDB、MyISAM

两种引擎差异对比


mysql隔离性是如何保证的 mysql隔离机制及实现原理_mysql隔离性是如何保证的

如何选择引擎

select多,用MyISAM;

其他操作多,用InnoDB

两个引擎索引结构

查找mysql数据存储位置方式

  1. 找到mysql安装目录
  2. 打开my.ini
  3. 搜索datadir,就看到了

MyISAM

每张表都有三个文件

.frm 表结构文件,存放的是表结构信息

.MYD 数据文件,存放的是表数据及每行数据对应在磁盘中的地址

.MYI 索引文件 里面存放了设置的索引及与MYD文件相对应的磁盘地址

InnoDB

每张表都有.frm文件

而索引及索引数据有两种存储方式:

1. 非独立表空间

进入mysql安装目录,通过my.ini查找存储位置可发现idbdata1,

2. 独立表空间

每个表都对应有一个.idb文件

3. idb文件存的哪些内容

表的索引及索引对应行的数据都存放到这里了

4. 如何判断是否是独立表空间

判定条件除了上面看文件外,还可以通过执行sql查询

SHOW VARIABLES LIKE 'innodb_file_per_table';

value=off就代表是非独立表空间

聚簇索引&非聚簇索引

非聚簇索引:索引和索引数据存储在两个文件中(MyISAM就是)

结构图如下:

mysql隔离性是如何保证的 mysql隔离机制及实现原理_表空间_02

聚簇索引:索引和索引数据存储在一个文件中(InnoDB就是)

结构图如下:

mysql隔离性是如何保证的 mysql隔离机制及实现原理_mysql隔离性是如何保证的_03

两种引擎查找流程

  1. MyISAM
  2. InnoDB

B树和B+树的区别

B树的结构


mysql隔离性是如何保证的 mysql隔离机制及实现原理_mysql隔离性是如何保证的_04

索引两种类型

单值索引、联合索引

脏读、幻读、不可重复读

脏读

两个线程执行流程:

a线程将id=1的 字段1设置为10

b线程读取id=1的 字段1 数据 10

a线程对第一步操作进行回滚

b线程这时持有的 20 就是脏读

幻读

两个线程执行流程:

a线程读取用户id=1备注数量为一条

b线程将用户id=1备注添加了一条

a线程再次读取用户id=1备注数量,这时变成两条了

幻读又叫做幻行

不可重复度

两个线程执行流程:

a线程读取id=1的字段1数据为10

b线程将id=1的字段1数据修改为20

a线程再次读取id=1 字段1 ,发现两次读取的不一致,这就是不可重复读

四大隔离机制

读取未提交

可读取到未提交的数据,会导致脏读、幻读、不可重复读

读取已提交(Oracle 默认)

只读已提交的数据,会导致幻读、不可重复读

可重复读(mysql默认)

只读已提交的数据,但可读取多次,造成幻读

串行

并发差,不会造成脏读、幻读、不可重复读