一、事务特性ACID
- 原子性:atomic
- 一致性:consistence
- 隔离性:isolation
- 持久性:durability
二、数据库隔离级别
- 脏读:事务B读取事务A未提交的数据
- 不可重复读:事务B读取数据时,事务未结束,事务A修改了这个数据,事务B又读数据时,两次数据可能不一样
- 幻读:事务在插入已经检查过不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测获取到的数据如同鬼影一般
三、Mysql引擎
- MYISAM
- 不支持外键、表锁
- INNODB
- 支持外键、行锁
四、B+索引和Hash索引
- Hash索引(哈希算法)
- 等值查询效率高,不能排序,不能范围查询
- 如果不存在hash碰撞,非常快O(1),但是如果同一个hash值不值一个key时,根据这个位置继续找,常用的是扩展链表法,当前key位置放置链表
- B+索引(BTREE【平衡多叉树】)B+树实现要去看看
- 数据有序,范围查询(如like查询)
- 时间复杂度等于树的高度,一般为3-5次IO
- 最左匹配原则,也就是多列索引中,数据在B+树的哪个节点,只取决于最左边的列上的key
五、聚集索引和非聚集索引
- 聚集索引:数据按索引顺序存储
- 非聚集索引:存储指向真正数据行的指针
六、索引分类
- 普通索引
- 唯一索引
- 主键索引
- 全文索引
- 组合索引
- 遵循最左前缀原则:当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询
七、数据库三范式
- 1NF:属性不可分
- 2NF:非主键属性,完全依赖于主键属性
- 3NF:非主键属性无传递依赖
八、数据库锁
- 乐观锁
- 悲观锁
- 排他锁
- 行锁
- 表锁