• SqlServer中的更新锁(UPDLOCK和READPAST)


          UPDLOCK和READPAST,通过UPDLOCK和READPAST的结合我们能够解决许多问题,比如我当前项目中对于更新预约人数,则用到了UPDLOCK和READPAST,因为考虑到并发如果固定预约人数为100,那么当出现并发时将有可能导致预约超出的情况,利用UPDLOCK则可以解决其他进程过来时对其进行修改的情况,同时结合READPAST解决脏读,同时不会阻塞,当有请求过来时我们直接利用表变量对预约人数进行更新,若更新失败我们再进行回滚,算是一个解决方案。同时利用UPDLOCK和READPAST还可以解决其他问题,比如,当有多个并发时我们要根据筛选条件获取第一值,也就是说第二个请求过来时获取到的值是下一个,那么这样的问题该如何处理呢,若我们只是简单进行处理,那么第二个请求同时过来时可能也会读取到之前读取的那个值,基于此场景,我们可以利用UPDLOCK和READPAST来解决。我们看如下代码就可以理解。

           UPDLOCK  读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。

           READPAST     指定数据库引擎不读取由其他事务锁定的行。 如果指定了 READPAST,将跳过行级锁。

  • 相关阅读:
    CAS无锁模式
    Redis 字符串结构和常用命令
    Redis 链表结构 和 常用命令
    Redis hash结构 和常用命令
    Spring + Redis ( 简单使用)
    使用idea 搭建一个 SpringBoot + Mybatis + logback 的maven 项
    Java 208道面试题及部分答案
    面试相关知识点
    使用IDEA 搭建一个SpringBoot + Hibernate + Gradle
    Java相关知识点
  • 原文地址:https://www.cnblogs.com/zping/p/11464891.html
Copyright © 2020-2023  润新知