从 并发导致重复会员号 的感悟

需求:
最近工作上有一个需求,生成一批不重复的会员号,在登录,注册是检测用户是否已有会员号,没有的话新增一个。在一开始使用的时候,并没有任何异常,一般的CURD能够处理。

在一次营销活动中,发现大批量user_id拥有相同的会员号。

解决方法:事务 + for update 乐观锁

START TRANSACTION;
SELECT id FROM v_ext WHERE user_id IS NULL LIMIT 1 FOR UPDATE; 
UPDATE v_ext SET user_id=xxx WHERE id=54;
COMMIT;
  • 读取数据时不锁,更新时检查是否数据已经被更新过,如果是则取消当前更新,一般在悲观锁的等待时间过长而不能接受时我们才会选择乐观锁。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 3,031评论 0 8
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,450评论 0 9
  • 最近碰到几个业务场景,会遇到并发的问题。在单实例情况下,我们会通过java.util.concurrent包...
    菜鸟小玄阅读 2,277评论 0 5
  • 转载自:数据库锁的几种类型 - CSDN博客 1前言 数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不...
    小雨启明阅读 2,227评论 0 2
  • 怪獸踹開遮擋的木板,木板倒在地上,濃濃灰煙瀰漫在他身後。走下樓梯,扭動生鏽的門把,微弱的暖光和輕快的吉他聲讓悶熱的...
    Obliviate阅读 124评论 0 2