悲观锁在SQL Server中的应用(sqlserver悲观锁)

悲观锁是指在SQL Server中,把资源绑定到访问它的线程上,只有当这个线程结束了他的工作后,其他线程才能访问该资源的一种锁的实现机制。表现在SQL Server中,就是在某些操作数据库的语句前用with(xlock)来保护数据可靠。

这里,Xlock只就表示悲观锁中具体的锁定机制,当某些资源上用该锁定机制锁定,表面上,同一资源的任何另外一个读写操作在这个锁定机制完成前,将被等待,无法操作,这样,就可以有效的避免在并发的情况下,发生不一致和冲突的问题,我们可以用悲观锁来实现原子操作,即使在系统出现故障也不会影响数据一致性。

下面主要就悲观锁在SQL Server中应用,我们用例子来说明:

假定现在有一张订单表order,order表包含了两个字段,编号id,和金额amount:

create table orders(
id int,
amount int
);

我们现在启用2个线程,线程A执行:

begin tran
update orders set amount=amount + 100
where id = 1

线程B执行:

begin tran
update orders set amount=amount-100
where id=1

如果不加入悲观锁的保护,就会出现问题,线程A和线程B同时修改金额,金额就会变得不确定,也就可能会发生不一致的问题。那么,加入悲观锁就可以保护这个资源,有操作它的线程后,其他线程才能访问该资源,即,线程A执行:

begin tran
update orders set amount=amount+100
where id = 1
with (xlock)

线程B执行:

begin tran
update orders set amount=amount-100
where id=1
with (xlock)

这样,在线程A没有提交之前,线程B就被锁定住,只能等待,到线程A结束后,才能访问该资源,这就可以有效避免出现不一致的情况发生。

因此,SQL Server中悲观锁可以有效的防止不一致发生,在使用时只需要加上with(xlock)就可以实现悲观锁,从而保证数据一致性。


数据运维技术 » 悲观锁在SQL Server中的应用(sqlserver悲观锁)