mysql 悲观锁实现
一.mysql 悲观锁实现条件
①.查询和修改必须在一个事务中
/*** 更新Inter数据*/ @Override @Transactional public void updateInterData() {InterBean interBean = interMapper.queryInterData("interface1");Long interUrl = interBean.getInterUrl();interUrl+=1;interBean.setInterUrl(interUrl);interMapper.updateInterData(interBean); }
②. 查询语句末尾需要加for update
<select id="queryInterData" resultMap="baseResult">select id,inter_number,inter_url from interface.lock_test_table where inter_number =#{interNumber} for update </select>
③.条件字段必须有索引(这个我不加索引也能实现,后面证明)
二.开始调用验证
@RequestMapping("/update") public String updateInterData(){for (int i = 0; i < 5; i++) {threadPool.submit(()->{lockService.updateInterData();});}return "OK"; }
使用线程池在controller 调用模拟高并发
测试场景1
①查询和修改在同一个事务下面
②for update
③查询条件字段加索引
测试结果:
调用前
调用后
可以看到在5个线程并发下修改数据由1每次加1现在是6了
测试场景2(将事务去掉其他条件保持不变)
测试结果:
调用前
调用后
锁没有生效,5个线程只加了1个值
场景3 (去掉for update,其他条件不变)
调用前:
调用后:
5个线程只加了1个值
场景3(去掉查询字段的索引,其他条件保持不变)
测试前:
测试后:
可以看到在5个线程并发下修改数据由1每次加1现在是6了(查询字段有无索引对锁没有影响,但是会让行锁变表锁,这个我后面写)
我的第一个博客,千里之行,始于足下.
mysql 悲观锁实现相关推荐
- mysql悲观锁关键字_MySQL悲观锁 select for update实现秒杀案例(jfinal框架)
MySQL悲观锁 select for update实现秒杀案例(jfinal框架) 发布时间:2018-08-17作者:laosun阅读(4287) 为了方便测试,博主使用最新的jfinal框架,里 ...
- 使用mysql悲观锁解决并发问题
使用mysql悲观锁解决并发问题 参考文章: (1)使用mysql悲观锁解决并发问题 (2)https://www.cnblogs.com/laoyeye/p/8228467.html 备忘一下.
- 【三大锁】悲观锁——mysql悲观锁
一 三大常用锁 悲观锁 你准备去银行取10w了,跟银行提前打个招呼,有个10w现金谁都别动.(一般只限制写-别人不能取那10w但是能查到银行总体余额,某些场景会限制读) 乐观锁 你准备取10w了,不打 ...
- mysql悲观锁的应用_mysql悲观锁
悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个很是基础的概念.mysql 悲观锁(Pessimistic Lock) 悲观锁的特色是先获取锁,再进行业务操做,即"悲观&qu ...
- mysql悲观锁会有脏数据吗_mysql悲观锁原理详解
mysql中的锁概念 mysql已经成为大家日常数据存储的最常用平台,但随着业务量和访问量的上涨,会出现并发访问等场景,如果处理不好并发问题的话会带来严重困扰.下面介绍一下如何通过mysql的悲观锁来 ...
- mysql悲观锁优化_MySQL数据库优化(三)—MySQL悲观锁和乐观锁(并发控制)
一.悲观锁 1.排它锁,当事务在操作数据时把这部分数据进行锁定,直到操作完毕后再解锁,其他事务操作才可操作该部分数据.这将防止其他进程读取或修改表中的数据. 2.实现:大多数情况下依靠数据库的锁机制实 ...
- mysql 悲观锁和乐观锁区别
1.mysql悲观锁:在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,依靠数据库提供的锁机制,每次会申请锁并加锁和解锁操作 第一步:两个终端均关闭自动提交 左边: 右边: 第二步:左边利用 s ...
- mysql悲观锁和乐观区别_MySQL悲观锁和乐观锁的区别是什么
MySQL悲观锁和乐观锁的区别是什么 区别如下: 1.概念不同 乐观锁( Optimistic Locking): 顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,&qu ...
- Mysql悲观锁以及乐观锁案例说明
悲观锁介绍: 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,往往依靠数据库 ...
最新文章
- Linux静态/动态链接库的创建和使用
- 苹果 的硬件架构和普通PC有区别吗? 有什么区别?
- pg 10 wal 归档同步配置
- 【struts2】struts2实现自定义数据类型转换器
- unity调整旋转需要传什么参数?参数在数学上叫做什么?_人脸识别背后,卷积神经网络的数学原理原来是这样的...
- SON Web Token设计单点登录系统
- restful web_RESTful Web服务可发现性,第4部分
- WinCE6.0 R3 安装记
- Mysql插入中文的字段内容时乱码的解决方法
- iOS NSMutableURLRequest 上传图片
- paip.c++ qt __gxx_personality_sj0 __gxx_personality_v0问题的解决
- 【爬虫】花瓣采集下载器
- RequestError Error connect ETIMEDOUT 59.24.3.174443
- SF18 | MACD顶底背离+动态区间交易模型源码(技术贴)
- WIN7截图工具灵活使用
- javascript基础学习 1
- 基因数据处理98之SparkBWA运行时spark on Yarn问题日志完整记录
- RTP/RTCP协议解析
- 用Python数据处理分析入门必备系列文章:环境安装
- 国产超低功耗华大单片启动文件详解及SystemInit函数分析