• 乐观锁和悲观锁


    乐观锁

    在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,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 count=@count-1,timesflag= WHERE timesflag=@flag --这里加了条件
    SET @rowcount=@@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 count=@count-1
    commit tran

  • 相关阅读:
    [LeetCode] Wiggle Sort
    [LeetCode] Perfect Squares
    [LeetCode] Minimum Window Substring
    [LeetCode] Valid Sudoku
    [LeetCode] Sudoku Solver
    [LeetCode] First Bad Version
    [LeetCode] Find the Celebrity
    [LeetCode] Paint Fence
    [LeetCode] H-Index II
    [LeetCode] H-Index
  • 原文地址:https://www.cnblogs.com/zsx-blog/p/6830662.html
Copyright © 2020-2023  润新知