zoukankan      html  css  js  c++  java
  • Transaction And Lock--两种方式实现可重复读

    一些需求要求两次查询数据之间不允许数据被修改,即可重复读取

    可重复读REPEATABLE READ与串行化SERIALIZABLE的区别在于串行化要求满足该查询的数据不被修改且无新满足该查询条件的数据插入(使用范围锁),可重复读只要求数据不被修改(保留S锁至事务结束)。

    而在read commit事务隔离级别下,被更新的数据会被加S锁,并一直保持事务提交或回滚,因此数据在事务区间内不能被其他事务修改,也保证了两次查询得到数据不发生变化(数据的值而不是行数)

    因此我们可以使用几种方式来保持数据不发生变化:

    方式1:在提交读隔离级别下使用HOLDLOCK
    HOLDLOCK相当于SERIALIZABLE隔离级别,会对数据加范围锁(Range-S)共享锁S并一直保持到事务结束

    方式2:在提交读隔离级别下对数据进行UPDATE
    这样对数据加U锁,U锁会保持到事务结束,这样阻塞了其他事务对该数据的读取(U锁与S锁不兼容)

    方式3:将隔离级别设置为
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ|SNAPSHOT|SERIALIZABLE

  • 相关阅读:
    js 进度条效果
    js切换背景颜色
    div定时放大缩小
    html图片拖放
    网站滑到指定的位置给div添加动画效果
    播放视频
    git (Linux(Centos)安装及使用教程)
    PHP 预定义常量(魔术常量)
    【POJ3254】Corn Fields
    树形DP初探•总结
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3522973.html
Copyright © 2011-2022 走看看