for update在mysql中使用
一问题
需求是异步给 IM 发送link消息,所以有一张消息表,每次查询发送失败的数据,并对这些行数据加锁,(避免别的线程再次查询出来发送消息)
select * from message where id > ?1 AND message_status = ?2 and send_times < ?3 order by create_time asc for update |
然后调用 IM发送消息的接口 进行补发,发现数据量较多时会出现发送两次消息的情况。
经过分析,发现原来是查出来发送失败的数据时候加锁失败,研究发现,原来 for update锁表必须开启事务,在begin与commit之间才生效。
二总结
InnoDB默认是行级别的锁,当有明确指定的主键时候,是行级锁。否则是表级别。
例子: 假设表foods ,存在有id跟name、status三个字段,id是主键,status有索引。
例1: (明确指定主键,并且有此记录,行级锁)
SELECT * FROM foods WHERE id=1 FOR UPDATE;
SELECT * FROM foods WHERE id=1 and state=’待发送’ FOR UPDATE;
例2: (明确指定主键/索引,若查无此记录,无锁)
SELECT * FROM foods WHERE id=-1 FOR UPDATE;
例3: (无主键/索引,表级锁)
SELECT * FROM foods WHERE state=’待发送’ FOR UPDATE;
例4: (主键/索引不明确,表级锁)
SELECT * FROM foods WHERE id<>’3’ FOR UPDATE;
SELECT * FROM foods WHERE id LIKE ‘3’ FOR UPDATE;
注意,for update 仅适用于InnoDB,并且必须开启事务,在begin与commit之间才生效。
行级锁时,不查到记录,无锁。 表级锁时,不管是否查询到记录,都会锁定表。
转载于:https://www.cnblogs.com/wanghongsen/p/9265531.html
for update在mysql中使用相关推荐
- 聊聊MySQL中的锁
原文地址:http://www.linzichen.cn/article/1571531799593484288 在程序开发中,当多个线程并发操作共享数据时,我们需要保证在任何时刻最多只能有一个线程在 ...
- mysql中的merge into,SQL Server 2008中利用merge into关键实现insert/update自动匹配(类似于MySQL中的For Update关键字)...
SQL Server 2008中利用merge into关键实现insert/update自动匹配(类似于MySQL中的For Update关键字) 语法请参考: 按照语法编写语句 DECLARE @ ...
- 【转】MySQL中select * for update锁表的问题
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...
- MySQL中update一条record的过程
在MySQL中,update是原地更新数据,原地更新数据,原地更新数据.重要的事情说3遍.这是不同于PGSQL的. update的具体过程是: (1).先对该条record对应的索引加X锁 (2).将 ...
- mysql中视图和表的区别及联系_MySQL中Update、select联用操作单表、多表,及视图与临时表的区别...
一.MySQL中使用从表A中取出数据来更新表B的内容 例如:要update表data中的一些列属性,但是修改属性的内容来源是来自表chanpin.SQL语言中不要显示的出现select关键字 upda ...
- mysql中锁原理及for update悲观锁的详解
mysql 中有多种多样的锁,今天我们具体分享一下: 一.mysql中乐观锁和悲观锁原理及种类: 乐观锁并不是数据库自带的,如果需要使用乐观锁,那么需要自己去实现,一般情况下,我们会 ...
- Mysql中使用Update From语句
记录一下mysql中使用Update from 语句更新字段值: 场景是国家行政区划的数据表,字段内容包括: 应用场景中不想使用级联选择,选中下级节点,比如东城区时,直接显示北京-北京市-东城区,因此 ...
- MySQL中的级联删除与更新策略on delete restrict on update restrict
MySQL中的级联删除与更新策略on delete restrict on update restrict 在MySQL中,当我们执行级联删除与级联更新时,可能会执行On Delete Restric ...
- mysql中一条update的执行过程
一.Server层阶段: 连接器:负责跟客户端建立连接.获取权限.维持和管理连接 分析器:验证通过以后,分析器会对该语句分析, 判断是否语法有错误等. 优化器:选择索引,生成执行计划. 执行器:根据优 ...
最新文章
- keras 的 example 文件 cnn_seq2seq.py 解析
- 实战:基于深度学习的道路损坏检测
- linux文件 i节点结构,Linux 文件描述符 文件表项 i节点结构
- 费曼:所有的科学知识都是不确定的
- anguarjs 图片预览_Text to Image Converter(文字转图片软件)下载-Text to Image Converter(文字转图片软件)v1.5绿色版下载...
- spring事务提交回滚原理mybatis版
- 在 SAP BTP 平台 Neo 环境里使用 SAP Cloud SDK 创建应用
- 魔板(信息学奥赛一本通-T1449)
- 解决只可以上QQ却不可以上网问题
- po3580SuperMemo(splay)
- android 不生成odex文件方法
- OsharpNS轻量级.net core快速开发框架简明入门教程-多上下文配置(多个数据库的使用)...
- pytorch ImageFolder
- MFC编程——Where is WinMain?
- java经纬度转地址_经纬度转地址示例代码
- 2799元即可畅享12GB+256GB超大存储,荣耀60 SE新版本正式发布
- 木瓜蛋白酶改性金纳米粒修饰淀粉/二氧化硅复合微球/硒化镉/聚苯乙烯荧光二氧化硅微球的研究
- python-乌龟吃小鱼(小游戏)
- 2015美团校招部分笔试题
- 基于张正友平面标定法的摄像机标定及GUI实现
热门文章
- python进阶06并发之二技术点关键词
- k-means及变种
- 兰州大学c语言课程作业答案,2016兰州大学C语言程序设计课程作业1附答案.doc
- 如何规划农商行商业智能系统中的决策分析系统?
- python调试神器_Python里三个最高逼格的调试神器
- vue条件渲染指令if/show
- Python中setdefault,deepcopy,copy函数(一分钟读懂)
- php 抽象类 接口 区别,PHP中抽象类和接口有什么区别
- java 线程 listview_android使用Thread实现json数据的传递,并且使用ListView显示
- 查看python版本命令_Anaconda常用命令小结