数据库默认隔离基本:可重复读:避免虚读,幻读,不可重复读。
1、数据库引擎
1)InnoDB 5.5以后的数据库默认引擎,特点:支持事务,行级锁,支持外键等高级特性,耗能高,并发效果好,容易产生死锁,支持索引结构BTree,聚簇索引与表空间共享存储,不对全表内容进行存储;
2)MyISAM 5.5之前的默认引擎,特点:不支持事务,表级锁,耗能小,并发效果差,不容易产出死锁,性能高,支持索引结构BTree,hash,非聚簇索引单独的文件,对全表内容进行存储;
InnoDB ---> BTree 聚集索引“主索引” 为表中的主键如果不存在主键,则数据库会判断表中的一个类似的列作为主索引,如果不 存在则会自动创建一个长多为6个字节的长整形,由主索引获取data域即获取相应的值。辅助索引依赖与主索引, 每 次先查出主索引在找到相应的data域获取目标值,所以辅助索引会携带主索引。
MyISAM ---> BTree 非聚集索引:索引和数据为两文件,索引中data域存放的是数据的地址。主索引key唯一和辅助索引key可以 重复没有多少区别。
InnoDB支持hash是自适应的不能人为干预,是数据库的一种自我优化策略。
BTree支持范围查找,多列索引。hash等值查询速度优于Btree不需要多个节点之间i/o操作。
索引类型:普通索引:普通的类上创建 common;
唯一索引:不允许重复值,但可以为空或null;
主键索引:全局唯一不可为空或null;
全文索引(InnoDB不支持),多列索引,单列索引
锁分类:悲观锁,乐观锁,matedata lock
悲观锁:使用数据本身的锁 --> select ... from .. for update
乐观锁:基于MVCC(多版本并发控制)理论为基础,在表设计是与实际数据多出一个列用于版本控制,缺点:增加了空间的占用, 优点:没有使用锁,提高了性能。
数据库设计:三范式:没有冗余字段,数据空间占用小数据唯一,存在不同表之间的频繁交互效率。
反三范式:存在冗余字段减少不同表之间的交互,空间换时间。