云服务器网:购买云服务器和VPS必上的网站!

MSSQL中悲观锁与乐观锁的比较

悲观锁和乐观锁是数据库并发控制的两种一般方式,其中,悲观锁体现对对象的排他性写策略,它假定每次访问数据库会失败,如果不能锁定数据,就令用户等待,直到该数据的锁被释放;而乐观锁是认为相反,也就是假定每次访问数据库会成功,基于此,乐观锁在对对象进行写操作时会检查数

悲观锁和乐观锁是数据库并发控制的两种一般方式,其中,悲观锁体现对对象的排他性写策略,它假定每次访问数据库会失败,如果不能锁定数据,就令用户等待,直到该数据的锁被释放;而乐观锁是认为相反,也就是假定每次访问数据库会成功,基于此,乐观锁在对对象进行写操作时会检查数据版本会不会失效,以肯定对象会不会被其他用户修改,如果被其他用户修改,则谢绝更新,否则更新最新的数据。

从理论上讲,悲观锁比乐观锁更安全,但乐观锁能更好地利用数据,由于它不会因发行锁而锁定数据,而是在更新对象时,检查对象的版本以确保对象的有效性,从而减少了等待时间,加快了处理速度。

MSSQL中,悲观锁和乐观锁可使用Transact-SQL语句实现。 悲观锁通过写操作引发,比如select语句后加上with(xlock)参数,从而锁定数据表,如:

SELECT * FROM orders WITH (XLOCK)

ERROR_TYPENAME

乐观锁通过读操作引发,比如向表中加入一个timestamp(rowversion)列,在任何更新操作完成时,该列的数据都会更新,然后轮询该列,以肯定数据会不会有更新,如:

SELECT * FROM orders WHERE rowversion = @rowversion

ERROR_TYPENAME

从性能上比较,悲观锁将在性能上产生更大的开消,由于每次访问表都需要在数据库中发行锁定,致使等待时间更长。乐观锁则更轻量,用户可以减少对表锁定的几率,以提高处理速度。

总之,悲观锁和乐观锁都有其各自优势和劣势,要根据业务的区别而选择适合的并发控制方式。 在MSSQL中,开发者可以根据需要来选择使用上面提到的两种方式来实现数据

的并发控制。

本文来源:https://www.yuntue.com/post/119983.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注