该文章不讲操作步骤,仅仅是做对mysql的认知,如有错误,请指出,相互探讨。
事务
事务时mysql执行的最小单元。
事务四大特性:
- 原子性
- 一致性
- 隔离性
- 持久性
事务是如何保证原子性的?
这是因为一个undolog的日志。比如说我们对一行数据进行操作,则会将其记录在undolog里面,只要不提交,则原表的数据则一直不变,当在undolog里一个操作失败,我们取消提交,则undolog里所有的信息清空。
搜索引擎
MyISAM
- B+树为索引
- 数据存储到另外的地方,B+叶子结点用来存储索引
- 产生3个文件
- 表级锁
InnoDB
- B+树为索引
- 数据存储到叶子结点
- 产生2个文件
- 行级锁
由上,可自行知道两者的区别和一致性。而后我们来解决一些相关的常见问题。
- 为什么InnoDB不适合全文索引,MyISAM适合?
答:我们来分析下:
-
如果用InnoDB做全文索引,那么由于其存储特性:数据存储到叶子结点。数据多的话,内存肯定放不下。那么操作应该是:
从磁盘加载部分数据放入内存。在内存中搜索要查询的信息,如果没有搜索到,则然后不断从磁盘上拿到数据放入内存,再加载,直到搜到需要查询的信息。 -
用MyISAM。存储特性:索引存到叶子结点,那么可以全部放于内存。
故,MyISAM更适合全文索引。
- InnoDB支持事务,MyISAM不支持事务?
- InnDB是行级锁
- MyISAM是表级锁
主从模式
讲到主从模式,有个关键的东西叫做binlog。
binlog是用来存储执行记录的。就是对数据进行过操作的都会记录下来,除了select。因为这个并没有对数据产生实质性的修改。所以对debug没用。
binlog作用:
- 恢复数据:当数据丢失,可以拿到昨天备份的数据,再根据binlog恢复数据
- 主从模式:master数据存储后会存储到binlog这时候会发布同步通知到slave里面。