确保事务中隔离属性的方法之一是要求以互斥的方式访问数据项。这意味着,当一个事务正在访问数据项时,没有其他事务可以修改该数据项。因此,用于实现需求的最常用方法是仅在事务当前持有该数据项的锁时,才允许该事务访问该数据项。
因此,需要锁定操作以确保事务隔离。
1.共享锁(S):
- 共享锁也称为读取锁,仅用于读取数据项。
- 共享锁支持读取完整性。它们确保在只读请求期间不会更新记录。
- 共享锁也可以用于防止任何形式的记录更新。
- 用Lock-S表示。
- 使用Lock-S指令请求S锁定。
例如,考虑一种情况,最初A = 100,并且有两个事务正在读取A。如果一个事务想要更新A,则在这种情况下其他事务将读取错误的值。但是,共享锁会阻止它在完成读取之前进行更新。
2.排他锁(X):
- 使用排他锁,可以读取和写入数据项。也称为写锁。
- 排他锁可防止任何其他储物柜在对象上获得任何形式的锁。
- 一次只能拥有一项交易。
- 它表示为Lock-X。
- 使用Lock-X指令请求X锁定。
例如,考虑一种情况,当交易需要从A减去50时,初始A = 100。我们可以通过在其上放置X锁来允许该交易。因此,当任何其他事务要读取或写入时,排他锁将阻止它。
锁兼容性列表:
- 如果事务T1持有数据项A中的共享锁,则控制管理器可以将共享锁授予事务T2,因为兼容性为TRUE,但是由于兼容性为FALSE,它不能授予排他锁。
- 简而言之,如果事务T1正在读取数据项A,则同一数据项A可以被另一个事务T2读取,但是不能被另一个事务写入。
- 类似地,如果某个事务中的数据项持有排他锁(即,用于读取和写入操作的锁),则其他任何事务都无法获得共享或排他锁,因为兼容性函数表示为FALSE。
共享锁和排他锁之间的区别:
S.No. | Shared Lock | Exclusive Lock |
---|---|---|
1. | Lock mode is read only operation. | Lock mode is read as well as write operation. |
2. | Shared lock can be placed on objects that do not have an exclusive lock already placed on them. | Exclusive lock can only be placed on objects that do no have any other kind of lock. |
3. | Prevents others from updating the data. | Prevents others from reading or updating the data. |
4. | Issued when transaction wants to read item that do not have an exclusive lock. | Issued when transaction wants to update unlocked item. |
5. | Any number of transaction can hold shared lock on an item. | Exclusive lock can be hold by only one transaction. |
6. | S-lock is requested using lock-S instruction. | X-lock is requested using lock-X instruction. |