一、概述
数据库是一个共享资源,可以供给多个用户使用。运行多个用户同时使用一个数据库的数据系统统称多用户数据库系统。例如,飞机订票数据库系统。在这样的一个系统中,在同一时刻并发运行的事务数可达数百上千个。
当多个用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况。若对数据操作不加控制就有可能存取和存储不正确的数据,破坏事务的一致性和数据库的一致性。
事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务,而事务的ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。
二、数据库并发存在的问题
- 脏读
读脏数据是指事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1被撤销,T1修改过的值回复原值,T2读过的数据就会与数据库中的数据不一致。
- 丢失修改
T1与T2读入同一数据并修改,T2提交的结果破坏T1提交的结果。
- 不可重复读
事务T1读取数据后,事务T2执行更新操作,使得T1无法再现前一次读取的结果。
-
三、并发控制技术
-
封锁
所谓封锁,就是事务T在对某个数据对象,例如表、记录操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。
封锁类型