目录
1.事务
2.并发控制
1.事务
事务的特点:ACID
原子性 atom
一致性 consistent
隔离性 isolation
持久性 durable
故障的种类
1.事务内部故障
措施:采取redo重做和undo撤销技术
2.系统故障DBMS
措施:重启
3.介质故障
硬件损坏
4.计算机病毒
数据恢复技术
数据转储:
对执行失败的数据重新执行一遍
日志文件:
记录事务对数据的更改操作的文件
恢复的策略
事务故障:那么就撤销之前所有的操作
系统故障:还没执行完的事务undo,丢失的事务redo
介质故障的恢复:
系统故障:重装数据库,重做已经完成的事务
系统故障的话,只有故障的时候还在执行着的撤销,其他都是重做
2.并发控制
并发带来的问题
问题:
1.丢失修改
我修改的东西丢失了,我把int a=3,a++ ,当同时执行多次的时候就会出现丢失修改(执行了n次++实际上小于加了n次),因为a++位三部,第一步读取的时候可能读的是老数据
2.脏读
读的是已经撤回的无效的数据
PDD商家600元iphon13 店员打错少打一个0,上架了,立刻发现撤回。
这时候某位消费者趁机下了10单,6000元,这就是脏读,读了无效的数据
3.不可重复读
在同一个事务中,连续两次读到的数据是不一致的
并发解决方案
引入锁
1.排他锁:
写锁,X锁 (加写锁的时候其他人不可以读,写)
2.共享锁
读锁 ,S锁 (加读锁的话其他人只能读)
封锁协议
一级封锁协议:
修改时候必须加X锁(排他锁),直到结束
二级封锁协议
读的时候必须加共享锁(S锁),读完结束
三级封锁协议
读的时候必须加S锁,直到结束
一级封锁协议解决,修改丢失
二级封锁协议解决脏读
二级封锁协议解决不可重复读
死锁和活锁
死锁:两个锁,你等我,我等你,相互谦让,咱俩卡在这
活锁:我等你,你做完了我开始,如果前者一直执行,可能一直等待
可串行性:
并发调动的某一次的结果与串行的结果一致
可串行性是正确调度的准则
两段锁协议
先上锁的先解锁
封锁的粒度
封锁的粒度大并发就小,开销小。成反比