目录
-
数据库必须具备的四个特性
1:原子性:全部成功或失败,失败不会有影响
2:一致性:事务执行前后状态一致。
3:隔离性:多个并发事务之间要相互隔离;
4:持久性:数据提交后的改变是永久的,故障不丢失
隔离性:不考虑事务的隔离性,会产生的几种问题:
01:脏读
数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。
02:不可重复读
不能一个数据同一时间被两个人同时读取。
03::幻读
当事务不是独立执行时发生的一种现象,T1修改全部数据,T2在另一时间插入了一行数据,那T1再读取就发现,诶,有一个没改,是幻觉么,就是幻读,可设置只读来解决。
-
数据库范式
第一范式(1NF)数据表每一列不可分割,不能是集合数组,不可拆分,例如应该把电话分为座机和移动电话
第二范式(2NF)实体属性应该完全依赖于主关键字,不能部分依赖,例如学分依赖于课程,但是不依赖另一个关键因素学号。
第三范式(3NF)非主属性不依赖其他表的非主属性,例如单位表有字段(楼层,区号),那员工表就不用出现这些属性了。
BCNF 不能存在关键字段决定关键字段,例如管理员号与仓库号互相决定。
第四范式(4NF)一项不能是多值依赖的,比如孩子,有可能有很多孩子,选修课也有很多,这就是多值问题
索引
聚集索引,按顺序的。非聚集索引,物理上连续的。
存储过程
先编译,再执行。大型数据库系统中,先编译好后,用存储过程的名字来调用,速度就会很快
死锁
原因:
系统资源不足,运行顺序不合适,资源分配不当
必要条件:
循环等待,不可强占,互斥每个资源只能被一个占有,一个进程申请新资源的时候还占有老资源
解决方案:
银行家算法,全部加锁否则不执行,顺序封锁
为何选择B+树
若选择二叉查找树:一个二叉查找树是由n个节点随机构成,所以,对于某些情况,二叉查找树会退化成一个有n个节点的线性链。
AVL:则是带有平衡条件的二叉查找树,如不满足平衡,则要翻转,因此适合查找多插入少的情况
红黑树:用标注颜色的方式限制一条路径比其他路径大两倍的情况。属于弱平衡,对于搜索、插入、删除操作多的情况下,我们就用红黑树
红黑树的性质
1、每个节点非红即黑;
2、根节点是黑的;
3、每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的;
4、如果一个节点是红的,那么它的两儿子都是黑的;
5、对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点;
6、每条路径都包含相同的黑节点;
B+树
- 多叉树,降低树高度,把数据分成多个区间
- 每个节点可存储多个key值
- 非叶子节点存储key,叶子节点存储key和value
- 叶子节点相连,方便顺序查找
- 主要是优化了磁盘读取效率,IO更快,顺序存储,不用过多的磁道存储,支持范围查询,无需整个树遍历。