第五?/p>
分布式数据库中的并发控制
比较?/p>
DB2 ORACLE MSSQL SYBASE INFORMIX
并发控制机制
在关系数据库?/p>
DB2
?/p>
Oracle
?/p>
Sybase
?/p>
Informix
?/p>
SQL
Server
)最小的恢复和交易单
位为一个事务(
Transactions
?/p>
,
事务具有
ACID(
原子性,一致性,隔离性和永久?/p>
)
特征?/p>
关系数据库为了确保并发用户在存取同一数据库对象时的正确?/p>
(即无丢失更新?/p>
可重复读?/p>
不读
"
?/p>
"
数据,无
"
幻像
"
读),数据库中引入了并发(锁)机制。基本的锁类型有两种:排
它锁?/p>
Exclusive locks
记为
X
锁)和共享锁?/p>
Share locks
记为
S
锁)?/p>
排它锁:
若事?/p>
T
对数?/p>
D
?/p>
X
锁,
则其它任何事务都不能再对
D
加任何类型的锁,
?/p>
?/p>
T
释放
D
上的
X
锁;
一般要求在修改数据前要向该数据加排它锁?/p>
所以排它锁又称为写锁?/p>
共享锁:若事?/p>
T
对数?/p>
D
?/p>
S
锁,
则其它事务只能对
D
?/p>
S
锁,而不能加
X
锁,直至
T
释放
D
上的
S
锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁?/p>
DB2
数据?/p>
IS
?/p>
IX
?/p>
SIX
方式用于表一级并需要行锁配合,他们可以阻止其他应用程序对该表加?/p>
排它锁?/p>
如果一个应用程序获得某表的
IS
锁,该应用程序可获得某一行上?/p>
S
锁,用于只读?/p>
作,同时其他应用程序也可以读取该行,或是对表中的其他行进行更改?/p>
如果一个应用程序获得某表的
IX
锁,该应用程序可获得某一行上?/p>
X
锁,用于更改?/p>
作,同时其他应用程序可以读取或更改表中的其他行?/p>
如果一个应用程序获得某表的
SIX
锁,
该应用程序可以获得某一行上?/p>
X
锁,
用于更改
操作,同时其他应用程序只能对表中其他行进行只读操作?/p>
S
?/p>
U
?/p>
X
?/p>
Z
方式用于表一级,但并不需要行锁配合,是比较严格的表加锁策略?/p>
如果一个应用程序得到某表的
S
锁?/p>
该应用程序可以读表中的任何数据?/p>
同时它允许其
他应用程序获得该表上的只读请求锁。如果有应用程序需要更改读该表上的数据,必须等
S
锁被释放?/p>
如果一个应用程序得到某表的
U
锁,
该应用程序可以读表中的任何数据,
并最终可以?/p>
过获得表上的
X
锁来得到对表中任何数据的修改权。其他应用程序只能读取该表中的数据?/p>
U
锁与
S
锁的区别主要在于更改的意图上?/p>
U
锁的设计主要是为了避免两个应用程序在拥有
S
锁的情况下同时申?/p>
X
锁而造成死锁的?/p>
如果一个应用程序得到某表上?/p>
X
锁,
该应用程序可以读或修改表中的任何数据?/p>
其他
应用程序不能对该表进行读或者更改操作?/p>
如果一个应用程序得到某表上?/p>
Z
锁,
该应用程序可以读或修改表中的任何数据?/p>
其他
应用程序,包括未提交读程序都不能对该表进行读或者更改操作?/p>