一、事务(transcation)
什么是事务:数据库执行的基本单元,是数据库的逻辑工作单元
事务的几个问题:
- 并发操作
- 数据的不一致性
事务的属性ACID
原子性Atomicity 要么没做,要么全做了
一致性Consistency 隔离执行事务时候要保证一致性
隔离性Isolation 多个事务并发执行两两不影响
持久性Durability 事务完成后,对系统的影响是永久的
事务的状态
Active 活动状态
Partially commited 部分提交
Failed失败状态
Aborted放弃状态
Committed提交状态
Terminated终结状态
恢复数据——
- 建立冗余数据
方法:
- 数据转储,等级日志文件
常用恢复技术
- 事务故障:undo
- 系统故障:undo+redo
- 介质故障:重新备份并恢复到一致性状态+redo
提高恢复效率的技术
- 检查点技术
- 镜像技术
二、并发控制
1 三种并发冲突
- 写写冲突:两个事务都对数据库进行修改的时候
- 读写冲突:事务两个连续读操作因为别的事务在其中的秀给而不一致
- 写读冲突:一个事务里面写完了回滚了,然后别的事务在其回滚之前读了…
当一系列事务并发执行的时候isolation很容易被破坏
并发控制就是一系列机制,可以控制事务执行顺序,让某一个并发事务的执行结果等价于穿行的执行结果
1 lock模式。分为排他锁和共享锁。排他锁是,只有拿到排他锁X的才可以对事务操作。拿到共享锁S的只能读不能写。
锁由并发控制。他们也有相容性。S锁与且只与S锁相容,X锁不与任何锁相容。也就是说,有一个事务应有某个东西的X锁时候,当且仅当只有当他吧X锁释放了,别的锁才可以拥有这个东西的X锁或者S锁。
这个样子的互锁机制还由死锁的问题。为了避免这个问题,引入了两阶段控制协议。第一个阶段增长阶段允许事务申请数据项的锁,但是不允许释放数据项的锁。第二阶段允许事务释放锁,凡是不允许申请锁。有时候2PL也不能避免思索
三级封锁协议——为了克服数据库中的数据不一致问题
- 一级:防止丢失修改
- 二级:除了防止丢失修改还可以防止读脏数据
- 三级:除了防丢失修改和防止读脏数据,还防止了不可重复读