mysql并发更新
常见方案
乐观锁
select * from tab1 where id = ?;
update tab1 set col1 = ? where id = ? and version = ?;
- 缺点
- 在高并发下可能更新失败,所以需要通过重试(select...,update...)来提高更新成功率
select * from tab1 where id = ? for update;
update tab1 set col1 = ? where id = ?;
- 优点
- 缺点
- 可能导致其它相关的(包含该for update行内容)并发操作阻塞
update tab1 set col1 = col1-1 where col1>1
- 优点
- 缺点
- 无法获取更新前后col1字段的值
- 只适用于简单的where条件
异步更新
- 优点
- 减少客户端等待时间
- 提高服务端的并发量
- 把并发操作转化为更简单的同步操作
- 缺点
- 服务端和客户端需要支持异步消息通知,因为异步操作的结果只能异步返回
- 需要使用消息队列和异步消息通知,如果没有现成框架支持,代码实现会更加复杂
- 不支持其他需要依赖更新结果的逻辑,除非所有逻辑都异步化
mysql并发更新
原文:https://www.cnblogs.com/tao_/p/9537666.html