(画师蓝鸟@mo13tto)
数据库笔记(补充)——候选码的确定方法
求最小依赖集
最小函数依赖集Fm的定义,求法以及举例
当然这篇文章后半部分有误:【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂
数据库期末考试预习之候选码,最小函数依赖集,3NF分解算法,判断第几范式
数据库 分解3NF
一道关系模式的练习题(求候选码,最小依赖集,模式分解)
E-R图转化为关系模型
并发控制
事务是并发控制的基本单位
并发控制的主要技术:
- 封锁
- 时间戳
- 乐观控制法
- 多版本并发控制
封锁
解决并发操作带来的数据不一致性问题
主要是X锁(排它锁)和S锁(读锁)
- X锁:加上之后只能本事务读写加锁的数据对象,其他事务不能加任何类型的锁
- S锁,加了就能读(但不能修改),其他事务随时可加S锁。
一个数据有S锁(S锁数量>=1时)就只能读,直到所有S锁释放
即一个数据对象同一时刻最多只能存在一个X锁,或者存在零到多个S锁。
加锁应当遵循的规则即封锁协议
一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
二级封锁协议:在一级封锁协议基础上加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
三级封锁协议:在一级封锁协议基础上加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
注意申请和释放的时机
可串行化调度
这个定义确实很晦涩,我理解的就是对于事务 T 1 T_1 T1和 T 2 T_2 T2,它们分为很多步骤(比如读取、运算、写回)。串行调度就是先执行 T 1 T_1 T1在执行 T 2 T_2 T2或者先执行 T 2 T_2 T2和 T 1 T_1 T1.总之是一个事务运行完再进行另一个。
但是这里由于先后执行顺序不同,结果可能也不同
可串行化调度就是执行一个事务的一部分,然后执行另一个事务的一部分,然后再回来执行,其结果符合原先串行调度的任意一种结果就行
我拿张别人的图,可以结合着看看。
非可串行化就是结果和串行调度都不一样。一般就是两个操作都先S锁取同一时刻的
初始值,然后最后导致运算结果不一样
两段锁协议
申请的时候只能申请,释放的时候只能释放
遵循两段锁协议的事务可能会发生死锁