数据库乐观锁方案一般只能适用于执行更新操作的过程,我们可以提前在对应的数据表中多添加一个字段,充当当前数据的版本标识。

这样每次对该数据库该表的这条数据执行更新时,都会将该版本标识作为一个条件,值为上次待更新数据中的版本标识的值。

适用操作

更新操作

使用限制

  • 需要数据库对应业务表中添加额外字段

为了每次执行更新时防止重复更新,确定更新的一定是要更新的内容,我们通常都会添加一个 version 字段记录当前的记录版本,这样在更新时候将该值带上,那么只要执行更新操作就能确定一定更新的是某个对应版本下的信息。

这样每次执行更新时候,都要指定要更新的版本号,如下操作就能准确更新 version=5 的信息:

UPDATE my_table SET price=price+50,version=version+1 WHERE id=1 AND version=5

上面 WHERE 后面跟着条件 id=1 AND version=5 被执行后,id=1version 被更新为 6,所以如果重复执行该条 SQL 语句将不生效,因为 id=1 AND version=5 的数据已经不存在,这样就能保住更新的幂等,多次更新对结果不会产生影响。

数据库乐观锁如何实现幂等性?相关推荐

  1. 浅谈实现数据库乐观锁和悲观锁

    目录 数据库乐观锁 适用场景 定义 实现方式 优点与缺点分析 优点 缺点 案例 数据库悲观锁 适用场景 定义 实现方式 悲观锁优缺点分析 优点 缺点 在单实例JVM中,常见的处理并发问题的方法有很多, ...

  2. 乐观锁实现接口幂等性_calvin-idempotent

    自定义注解,基于Redis实现接口幂等性 一.幂等性概念 幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中. 在编程中,一个幂等操作的特点是其任意多次执行 ...

  3. 乐观锁实现接口幂等性_什么是幂等性,如何实现,以及乐观锁在项目中的实际用法...

    什么是幂等性? 对于同一笔业务操作,不管调用多少次,得到的结果都是一样的.普通方式 只适合单机 jvm加锁方式Lock只能在一个jvm中起效,如果多个请求都被同一套系统处理,上面这种使用Lock的方式 ...

  4. 乐观锁实现接口幂等性_深入理解幂等性

    什么是幂等性 HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外).也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同. ...

  5. 浅谈数据库乐观锁、悲观锁

    来自:非科班的科班 并发问题 当程序中出现并发的问题时,我们就要有相应的手段保证数据的正确性,防止多个用户在操作数据的时候,出现和预期数据不一样的现象,产生脏数据,在数据库的层面如果没有做好并发控制, ...

  6. oracle数据库字段的值加一_天天面试--数据库乐观锁和悲观锁

    悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.悲观锁:假 ...

  7. MYSQL数据库乐观锁之设计version字段

    一.为什么需要锁(并发控制)?       在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题.       典型的冲突有:         1.丢失更新: ...

  8. mysql乐观锁 秒杀_使用数据库乐观锁解决高并发秒杀问题,以及如何模拟高并发的场景,CyclicBarrier和CountDownLatch类的用法...

    数据库:mysql 数据库的乐观锁:一般通过数据表加version来实现,相对于悲观锁的话,更能省数据库性能,废话不多说,直接看代码 第一步: 建立数据库表: CREATE TABLE `skill_ ...

  9. 数据库乐观锁和悲观锁例子和分析

    1.乐观锁:乐观地认为每次读数据别人都不会修改,所以不需要用数据库锁 //查出商店中id=1的商品的版本号 select version currentVersion from shop where ...

最新文章

  1. fifa17服务器维护,3月17日《EA SPORTS FIFA Online 2》服务器例行停机维护公告
  2. python绘制雷达图代码实例-python处理excel绘制雷达图
  3. php中的伪类选择器,css伪类选择器介绍
  4. DevExpress的对话框XtraMessageBox的使用
  5. nodejs的事件循环1
  6. 使用Async对Angular异步代码进行单元测试
  7. JupyterLab显示pyecharts图像
  8. Mysql 基础学习
  9. 认识HTML5的WebSocket 1
  10. AHS of FCGRC 停课 Day 3
  11. PHP-Header缓存策略
  12. 可视化数据库监控警报工具 —— Sampler
  13. 考研英语近义词与反义词·四
  14. Mac苹果电脑怎么截图?Mac电脑快捷截图教程
  15. 【web前端面试题整理07】我不理解表现与数据分离
  16. htb:Starting Point
  17. 小码哥C++:第一课
  18. case when then 后返回多个值
  19. 操作系统:进程和线程所有知识点
  20. 成功解决 pycharm一直indexing

热门文章

  1. 给部署在openshift上的WordPress添加wptouch插件
  2. Debian 忘记root密码的处理(passwd:command not found)
  3. .NET 分布式架构开发实战之二 草稿设计
  4. Git学习笔记—Git Flow
  5. python控制窗口缩放
  6. 06.十分钟学会表达式语言EL
  7. 2016 -1 -3 导航控制器的学习
  8. Linux 安装Redis全过程日志
  9. 我理解的Hanlder--android消息传递机制
  10. 【新东方老师推荐】老师推荐--听说——这是全球最值得听的、最好听的100首英文歌...