来源
《数据库系统原理》
并发操作问题
事物是并发操作的基本单位, 保证事物的 ACID 特征是事务处理的重要人物, 而事务的 ACID 特征可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的. 为了保证事务的隔离性和一致性, DBMS 需要对并发操作进行正确调度. 其中完整性校验可以保证一个事务单独执行时, 若输入的数据库状态是正确的, 则其输出的数据库状态也是正确的, 但当多个事物交错执行时, 可能出现不一致的问题, 这也称为并发操作问题, 典型的有如下三种: 丢失更新, 不可重复读和读 "脏" 数据.
(1) 丢失更新
设有两个事物 T1 和 T2, 当它们同时读入同一数据并加以修改时, 事务 T2 的提交结果会破坏事务 T1 的提交的结果, 由此导致事务 T1 的修改丢失. 这就是一种由于对数据的并发操作而带来的数据不一致.
(2) 不可重复读
设有两个事物 T1 和 T2, 不可重复读是指事物 T1 读取事务后, 事务 T2 执行更新操作, 使事务 T1 无法再现前一次读取的结果. 通常, 不可重复读包括三种情况.
i) 事务 T1 读取某一数据后, 事务 T2 对其做了修改, 当事务 T1 再次读该数据时, 得到与前一次不同的值.
ii) 事务 T1 按一定的条件从数据库中读取某些数据后, 事务 T1 删除了其中部分记录, 当事务 T1 再次按相同条件读取数据时, 发现某些记录神秘的消失了.
iii) 事务 T1 按一定的条件从数据库中读取某些记录后, 事务 T2 插入了一些记录, 当事务 T1 再次按相同条件读取数据时, 发现多了一些记录.
(3) 读 "脏" 数据
设有两个事物 T1 和 T2, 读 "脏" 数据是指, 事务 T1 修改了某一数据, 并将其写回磁盘, 事务 T2 读取同一数据后, 事务 T1 由于某种原因被撤销, 这时事务 T1 已经修改过的数据恢复原值, 事务 T2 督导的数据, 就与数据库中的数据不一致, 则事务 T2 读到的数据就为''脏'数据, 机不正确的数据.
产生上述三类数据不一致的主要原因是并发操作破坏了事物的隔离性, 并发控制机制就是要用正确的方式调度并发操作, 使一个用户事务的执行不受其他事务的干扰, 从而避免造成数据的不一致.
解决并发操作所带来的数据不一致问题的方法有封锁, 时间戳, 乐观控制法和多版本并发控制等. 本节接下来主要介绍封锁方法, 这也是众多数据库产品采用的基本方法.
来源: https://www.cnblogs.com/dmeck/p/10457964.html