[MYSQL]如何并发查询并更新
来源:互联网 发布:学数据库之前学什么 编辑:程序博客网 时间:2024/06/08 16:07
【场景】多个应用实例,不约而同地从数据库查询哪些任务未被执行,然后更新这些任务的状态字段为“正在执行”。
(简述,多个消费者争领任务,同时需要宣布哪个任务被自己领取,而不至于让多个消费者重复领取同一个任务)
方案一:SELECT FOR UPDATE(糟糕的方案╮(╯﹏╰)╭)
SELECT FOR UPDATE 这个语句貌似很适合并发查询并更新的场景,因为它会自动上锁(当使用了索引时是行锁,否则是表锁)。
但稍有不慎,很容易造成阻塞,例如这里《MySQL行锁深入研究》
方案二:应用层分布式锁
可以在应用层使用一个分布式锁(可以放在Memcache中),控制同一时间,只允许一个应用实例进行查询并更新的操作。
方案三:利用数据库的乐观锁(建议采用)
1、增加一个字段,如ver,int值,默认为02、select ,同时获取ver 值SELECT user, ver FROM table_b WHERE c=03、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也是可以的。
0 0
- [MYSQL]如何并发查询并更新
- MySQL如何创建数据库并查询数据类型
- mysql如何取出为null的字段并进行更新
- mysql如何取出为null的字段并进行更新
- 如何解决mysql 查询和更新速度慢
- MySql查询更新例子
- MySQL 如何对同一张表来查询并update ?
- MySQL 并发更新性能测试
- vc++连接mysql数据库,并对数据库中的表进行查询、插入、删除、更新等
- MySql几个查询更新例子
- mysql子查询更新问题
- MySQL#利用子查询更新
- mySQL的 插入 查询 更新
- mysql根据查询条件更新
- mysql 联表更新查询
- MySQL中SELECT+UPDATE并发更新问题
- MySQL中SELECT+UPDATE并发更新问题
- Mysql-select+update并发更新问题
- Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析
- [ZJOI2006书架]Splay
- 选项卡的实现的几种方法
- 如何踏上人工智能之路(机器学习篇)
- [HDU 1394]Minimum Inversion Number(归并排序/线段树)
- [MYSQL]如何并发查询并更新
- TCP/IP:UDP(3) ICMP
- leetcode 35. Search Insert Position
- [翻译]memcached 文本协议(未完成)
- 数据存储(SharedPreferences)(内部存储及外部存储)
- quagga源码学习--BGP协议对等体连接tcp md5签名认证选项
- C++最大公约数
- 1056. Mice and Rice (25)PAT甲级
- node.js中express的安装及调试流程的整合