第八章 并发控制 习题解答和解析 1
在数据库中为什么要并发控制
答:数据库是共享资源,通常有许多个事务同时在运行
当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况
若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性
所以数据库管理系统必须提供并发控制机制
并发操作可能会产生哪几类数据不一致
用什么方法能避免各种不一致的情况
答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据
(1)丢失修改(Lost Update)两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失
(2)不可重复读(Non -Repeatable Read)不可重复读是指事务T1读取数据后,事务T2执行更新操作,使 T1无法再现前一次读取结果
不可重复读包括三种情况:详见《概论》8
1(P266)
(3)读"脏"数据(Dirty Read)读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则 T2读到的数据就为"脏"数据,即不正确的数据
避免不一致性的方法和技术就是并发控制
最常用的技术是封锁技术
也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制
答:封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象
封锁是实现并发控制的一个非常重要的技术
基本的封锁类型有几种
试述它们的含义
答:基本的封锁类型有两种:排它锁(Exclusive Locks