Mysql学习初整理

Mysql
b+tree:矮胖形的树状结构;

              1:非子叶节点存储子叶节点的分区指针信息不存储数据

              2:子叶节点存储主键信息(如有主键存储主键列信息,否则存储唯一索引列信息,两者都未生成则会存储生成隐式的rowid)

  联合索引:多列组合创建的索引;

               1:最左前缀原则:where 条件中必须包第一列的字段才会生效且需正确命中索引   

               2:原理:多列联合索引先按第一列构建b+tree结构,第二列基于第一列再构建b+tree索引以此类推,因此第一列未命中索引,第二例自然不会命中索引

               3:回表查询:对于普通索引(二级索引,非聚簇索引),构建b+tree不会存储该列数据,而是存储主键对应的指针引用,所以普通索引查询时先从主键索引中找到对应的主键再根据主键查询返回完整数据    待加深理解

 InnoDB行级锁:只有当检索条件中包含索引才使用行锁,否则使用表锁

 ACID:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),持久性(durability)

 原子性:事务具有不可分割的性,一个事务被视为不可分割最小单元,在事务中的操作要么全部成功,要么全部失败。意思就是不能只执行事务中的一部分。

一致性: 事务将数据由一种一致性的状态转换到另一种一致性的状态,保证了事务开始之前和结束后的数据完整性

隔离性:一个事务的执行不能被其它的干扰,即一个事务内部中操作及使用的数据对其它事务是隔离的,并发执行的各个事务之间不能互相干扰

持久性:一旦事务提交,事务中操作修改的数据会永久的保存到数据库中,此时即使系统崩溃已提交的数据已不会丢失

 事务隔离级别:脏读,幻读,不可重复读;理论上事务的隔离性可以保证事务之前的操作互不干扰,多个事务操作同一份数据必须等待上一个事务结束才可,这样就成了串行,但效率极低。因此需要舍弃事务原本的隔离性,由此出现了事务隔离级别的概念

脏读:一个事务读到了另一个事务的已修改但未提交的数据

幻读:一个事务执行中,另一个事务将新纪录添加到了正在读取的事务中

不可重复度:当事务内相同的记录被检索两次,且两次的检索结果不一样