系列文章目录
数据库这块因为我本身不是特别熟悉,并且被问的次数也不多,所以相对没那么详细。
数据库
数据库的关系有哪些
- 关系型数据库(最常用)
- 面向文档型
- 键值对型
- XML型
事务的四大特性(ACID)
- 事务:访问并可能操作各种数据项的一个数据库操作序列
- automicity(原子性)— 一个事务要么完成要么不完成
- consistency(一致性)— 一个事务开始前和结束后,数据库的完整性不被破坏
- isolation(隔离性)— 允许多个事务同时执行
- durability(持久性)— 事务执行完后,操作时永久性的
隔离性
- 问题
- 脏读 — 一个事务读取了另一个事务未提交的数据
- 幻读 — 一个事务内读取了另一个事务插入的数据,导致前后不一致
- 侧重于insert
- 锁表才能避免
- 如:统计所有员工的存款,此时甲新增了100元存款,前后两次不一致
- 不可重复读 — 一个事务读取某条数据,多次读取结果不一致
- 侧重于update和delete
- 锁行就能避免
- 如:读取甲的存款,两次读取之间,甲存入了100元,前后两次不一致
- 隔离级别
- Read uncommitted(读未提交)
- 三种问题都可能出现
- Read Committed(读已提交)
- 避免了脏读,其他的无法避免
- Repeatable Reads(可重复读)
- 避免了脏读和不可重复读,无法避免幻读
- Serializable(串行化)
- 完全避免
- Read uncommitted(读未提交)
主键
一个列或多个列的排列组合,使用这个组合可以唯一的确定数据库的某一行
索引的底层实现
B+树
大表的常见优化手段
- 限定数据范围 — 如查询时候只能查询一个月范围内的数据
- 垂直分区 — 根据数据表的相关性进行拆分,一张表拆为多张表
- 水平分区 — 通过某种策略储存数据分片,每一篇数据分散到不同的表中