乐观锁和悲观锁

Posted 追风呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乐观锁和悲观锁相关的知识,希望对你有一定的参考价值。

乐观锁

在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。

给表增加一个表示该行版本号的字段(类型:时间戳),或者可以叫“版本戳”

版本号字段的方式有几种:

1:计数器,每次加1,必须要由服务器来生成,主节点保证

2:GUID,缺点数值大,且不知道版本先后

3:哈希码,同GUID,

4:时间戳,可以由多台服务器生成,但必须保证时间同步,如果每毫秒更新很多次,需要保证时间精度要够,否则可能重复

declare @count as int
DECLARE @flag AS TIMESTAMP
DECLARE @rowCount AS int
begin tran
select @count=COUNT,@flag=timesflag from ttt
update ttt set [email protected],timesflag= WHERE [email protected] --这里加了条件
SET @[email protected]@ROWCOUNT --获取被修改的行数
commit TRAN

--对行数进行判断即可
IF @rowCount=1
PRINT ‘更新成功‘
ELSE
PRINT ‘更新失败‘

 

悲观锁
declare @count as int
begin tran
select @count=count from tb WITH(UPDLOCK)--更新锁,保证自查询起直到事务结束不会被其他事务读取修改,避免产生脏数据
update tb set [email protected]
commit tran

以上是关于乐观锁和悲观锁的主要内容,如果未能解决你的问题,请参考以下文章

java中悲观锁和乐观锁的区别

乐观锁和悲观锁

乐观锁和悲观锁

乐观锁和悲观锁

乐观锁和悲观锁

总结乐观锁和悲观锁