暑期系列:数据库杂七杂八
写在^ 前面
并发控制
并发可能导致的三种不一致状态
丢失修改
写-写
两个事务T2和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失
不可重复读
读-修改
读-删除
读-插入
读脏数据
修改-读
并发控制:正确调度并发操作,避免造成不一致性
- 封锁技术
写锁:其他事务不能读和写,也不能申请任何锁
读锁:其它事务可以读,可以再申请读锁
封锁协议:规定申请时间,持锁时长,释放时间
一级协议:修改前必须加写锁,事务[^ 结束]后释放
[^ 结束]: commit OR rollback
冲突操作:读-写,写-写
冲突可串行化[前趋图画法]((13 封私信 / 19 条消息) 事务操作调度冲突可串行化的判断(通过前驱图) - 知乎 (zhihu.com))
- 判断有几个事务
自左向右,逐个判断是否存在冲突操作
以锚定事务为起点,形成冲突的操作为终点,得有向边
(1)先判断第一个r2(A),找到冲突操作R2(A)W3(A),形成一条有向边
(2)接着判断第二个
(3)以此类推得到全部有向边
- 绘制前驱图(不用重复画)
- 判断:前驱图存在回路,说明该调度是冲突不可串行化的
两段锁协议:所有加锁放在第一个解锁之前
满足该协议的调度一定是可串行化的(正确的),反之不成立。