Mysql insert into...select...不产生锁问题

业务需求:一个人一天只能有一次签到,多客户端同时点击签到,

异常场景:虽然代码里面有判断是否重复签到的逻辑,但是在极短的时间内,在多个客户端签到,可能会出现多次签到成功

技术背景:mysql、mybatis

实现思路:插入前查询一下表里面是否存在 userId 和 signDate 的数据,如果存在则不插入。

具体实现:
    insert into sign_201804(<include refid = "BaseColumn"/>) 
    select #{id},#{userId},#{signDate},#{bonus},#{lat},#{lng}... FROM DUAL
        where NOT EXISTS ( select userId from sign_201804
                                    where userId = #{userId} and signDate = #{signDate} )
    <selectKey keyProperty= "id" resultType= "Long" order= "AFTER">
         SELECT LAST_INSERT_ID()
    </selectKey>

转载于:https://my.oschina.net/duo8523/blog/1794147

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值