mysql 的优化,以及数据库层保证并发,增加,修改,数据重复,修改数据不一致的问题,高效率查询语句

比如我们某个时间段要给用户发奖金,肯定要先写日志,再给用户加钱,但是有时间如果同时给一个用户发奖金,可能会引发并发带来数据不一致的问题,甚至说写了多条相同的日志

先来一个防止数据插入重复的sql ,dual 是系统自动的表,后面3个参数是不允许重复的条件

    
      INSERT into amount_date(admin_id,amount,actual_amount,discount_amount,add_time,`date`,commission,`name`,`type`)
        (SELECT #{admin_id},#{amount},#{actual_amount},#{discount_amount},#{add_time},#{date},#{commission},#{name},#{type}
         FROM DUAL
        WHERE NOT EXISTS(SELECT admin_id
        from amount_date
        where  admin_id = #{admin_id}
            and `date` = #{date}
            and `type` = #{type}))
    

再来一个防止数据并发修改,数据不一致的问题,那就是行级锁,查询日记表里面的钱复制到用户钱包字段,在修改用户钱包的时候

通过for update 把这条数据加锁

 
       UPDATE user a,
       (SELECT  u.id,u.user_money,c.user_money as c_user_money from user u,
         (SELECT user_money,user_id FROM account_log WHERE log_id = #{log_id})c
         where  u.id = c.user_id for update)b
       set a.user_money = b.user_money + b.c_user_money
        where a.id = b.id
    

多表查询,不要直接去关联两个表,应该用结果集去关联另外一个表

    

 

你可能感兴趣的:(SpringBoot微服务架构)