[MYSQL]如何并发查询并更新
【场景】多个应用实例,不约而同地从数据库查询哪些任务未被执行,然后更新这些任务的状态字段为“正在执行”。
(简述,多个消费者争领任务,同时需要宣布哪个任务被自己领取,而不至于让多个消费者重复领取同一个任务)
方案一:SELECT FOR UPDATE(糟糕的方案╮(╯﹏╰)╭)
SELECT FOR UPDATE 这个语句貌似很适合并发查询并更新的场景,因为它会自动上锁(当使用了索引时是行锁,否则是表锁)。
但稍有不慎,很容易造成阻塞,例如这里《MySQL行锁深入研究》
方案二:应用层分布式锁
可以在应用层使用一个分布式锁(可以放在Memcache中),控制同一时间,只允许一个应用实例进行查询并更新的操作。
方案三:利用数据库的乐观锁(建议采用)
- 1、增加一个字段,如ver,int值,默认为0
- 2、select ,同时获取ver 值
- SELECT user, ver FROM table_b WHERE c=0
- 3、update时检查ver 值是否为第2步获取到的值 (类似于CompareAndSet)
- UPDATE table_b SET ver=4,user='xx' WHERE c=0 AND ver=3
- 如果update的记录数为1,则表示成功;
- 如果update的记录数为0,则表示已经被其他应用(线程)update过了,需作异常处理
- ---------------------------------------------------
- 不用ver,使用代表任务状态的字段代替ver也是可以的。
转载于:https://www.cnblogs.com/wynjauu/articles/9190255.html
[MYSQL]如何并发查询并更新相关推荐
- 《MySQL tips:并发查询与并发连接区别》
并发连接与并发查询,并不是一个概念. 在执行show processlist的结果里,看到了几千个连接,指的是并发连接. 而"当前正在执行"的语句,才是并发查询. 并发连接数多影响 ...
- mysql多表查询插入更新_Mysql多表查询,多表插入和多表更新
/*************************************by garcon1986************************************************* ...
- MySQL 多表查询和更新练习
1) 先创建数据库和设置数据库: CREATE DATABASE HOSPITAL; USE hospital; 2) 创建三个数据表:tb_department, tb_doctor, tb_pat ...
- mysql级联查询_mysql 各种级联查询后更新(update select)
mysql 各种级联查询后更新(update select). CREATE TABLE `tb1` ( `id` int(11) NOT NULL, `A` varchar(100) defaul ...
- MYSQL多线程并发操作同一张表同一个字段的更新问题
MYSQL多线程并发操作同一张表同一个字段的更新问题? 可以用乐观锁方案: 在表里增加个字段,版本号字段 每次更新前先从数据库里获取这个版本号的值,然后更新时要同步更新版本号+1,并且增加更新条件版本 ...
- 高并发场景下更新数据库报错,记录一次 MySQL 死锁问题的解决
作者 l 会点代码的大叔(CodeDaShu) 今天隔壁项目组的开发小姐姐找到我,说她们项目正在做压力测试,更新 MySQL 数据库的一张表时,总是发生死锁,日志大概是这个样子的: org.sprin ...
- mysql 记录更新 内部_MySQL 入门(1):查询和更新的内部实现
摘要 在MySQL中,简单的CURD是很容易上手的. 但是,理解CURD的背后发生了什么,却是一件特别困难的事情. 在这一篇的内容中,我将简单介绍一下MySQL的架构是什么样的,分别有什么样的功能.然 ...
- mysql更新id最大_我们可以在单个MySQL查询中更新具有最高ID的行吗?
是的,我们可以做到.让我们首先创建一个表-mysql> create table DemoTable ( ID int, GameScore int ); 使用插入命令在表中插入一些记录-mys ...
- Mysql更新计数器_MySQL实现计数器如何在高并发场景下更新并保持数据正确性
一张表 两个字段 一个id 一个useCount 表里存了100个id 每个id对应自己的useCount 业务场景是:当id每使用一次 useCount要加1. 当useCount大于1000时 这 ...
最新文章
- OpenGL tessmodes细分模式的实例
- 区块链入局,51小长假听歌、打游戏的姿势将被颠覆!
- 二十一 JDK注解注解案例
- 十年编程经验凝结 与新人们分享
- 20年的老程序员对新入行的朋友的一些建议
- 关于在windows上首次编译运行pbrt-3
- 信息安全软考——第四章 网络安全体系与网络安全模型 知识点记录
- 三调 图斑地类面积_图斑地类面积理论值计算方法说明 -
- Ubuntu 安装显卡驱动 CUDA10 cuDNN详细教程
- 用二维码分享WiFi密码(转)
- 双目视觉焦距_双目视觉成像原理
- A*算法和dijkstra算法
- 网络模块与RJ45水晶头接线方法
- C++高阶 常对象和常函数
- AUTOCAD——特性匹配
- 中国软件公司100强排名
- 股票量化分析工具QTYX使用攻略——形态选股结果回测(更新v2.5.6)
- JQuery-weui city-picker动态加载数据
- 华为云hica学习笔记
- 游戏建模初学者必看的游戏人物模型贴图制作方法及制作小技巧