1
数据库原理与应用技术
1.7.2.1 6.2.1 数据库并发操作带来的问题
6.2.1 数据库并发操作带来的问题

事务是并发控制的基本单位,保证事务的ACID特性是事物处理的重要任务。并发操作有可能会破坏其ACID特性。

数据库的并发操作会带来以下三个问题。

1. 丢失更新的问题

如表6-1所示,事务T1在t1时刻读取A值为10,在t4时刻写回值为A=A-1=9;在t2时刻,事务T2与T1并发执行,此时A值为10,所以T2在t6时刻写回值为A=A*2=20,而这是不正确的,A值应为18,原因就是在t5时刻丢失了事务T1对数据库的控制。

表6-1 丢失更新示例

2. 不一致问题,即读了过时的数据

如表6-2所示,事务T1在t1时刻读取A值为10,在t4时刻写回值为A=A-1=9,A值已更新;而事务T2在t2时刻读的是过时的数据,造成数据不一致。

表6-2 读了过时的数据示例

3. “脏数据”的读出

未提交的随后被撤销的数据称为脏数据。

如表6-3所示,事务T1在t2时刻将A值修改为9,并在t5时刻写回磁盘,即做了ROLLBACK操作,但在事务T2读取值A=9后,事务T1被撤销,被T1修改为9的A值恢复为10,所以T2读取的A值与数据库中的数据不一致,即事务T2读到的数据为脏数据。

表6-3 “脏数据”的读出示例

所以,DBMS必须提供并发控制机制。并发控制机制是衡量一个DBMS性能的重要标志之一。DBMS并发控制用正确的方法调度并发操作,以避免数据的不一致性,由DBMS的并发控制子系统来解决这些问题。实现“避免”的方法可用封锁技术和时标(Timestamping)技术。后面将重点介绍封锁(Locking)技术。