并发控制
并发操作带来的数据不一致性包括
-
丢失修改
- 两个事务 T1, T2 同时对一个数据修改, T2 的提交结果破坏了 T1 提交的结果, 导致 T1 的修改丢失
-
不可重复读
- 事务 T1 读取数据后, 事务 T2 执行更新操作, 使 T1 无法再现前一次读取结果
- 或 T2 删除了部分记录, 当 T1 再按相同的条件读取时, 发现数据消失了 (幻读)
- 或 T2 插入记录, T1 再次读取数据时, 发现多了一些记录 (幻读)
-
读脏数据
-
读脏数据是指: (1) 事务 T1 修改某一数据, 并将其写回磁盘 (2) 事务 T2 读取同一数据后, T1 由于某种原因被回滚 (3) 这时 T1 已经修改过的数据恢复原值, T2 读到的数据就与数据库中的数据不一致 (4) T2 读到的数据就是"脏数据"
-
数据的不一致性是由于并发操作破坏了事务间的隔离性
并发控制就是要用正确的方式调度并发操作, 使一个用户事务的执行不受其他事务的干扰, 从而避免造成数据的不一致性
并发控制的主要技术有: 封锁, 时间戳, 乐观控制法 (我们一般用的是封锁的方式)
封锁
封锁 就是事务在操作某个数据对象之前, 先向系统发出请求, 对其加锁. 加锁后事务就对这个数据有了控制权限, 在事务释放锁之前, 其他事务不能更新这个数据对象.
不同的锁有不同的功能, 基本封锁类型有 排他锁 和 共享锁