常见mysql问题文章汇总
专栏主要是涵盖了Java调优所碰到了问题
宫羽卫-银飞羽
主要从事与Java后台开发,目前就职与上海美团公司作为后台开发,擅长于多线程并发开发、数据库设计、属性Spring、mybatis等基础主流框架。
展开
-
MySQL中SELECT+UPDATE并发更新问题
注:SELECT+UPDATE并发更新代表的是一类问题,而不仅仅是指文中这种简单的场景,还可能是更复杂的场景(SELECT和UPDATE之间还有很多其他SQL)。对于更复杂的场景显然不好用一条SQL搞定,但第二种、第三种方案却是通用的。问题背景:假设MySQL数据库有一张会员表vip_member(InnoDB表),结构如下:当一个会员想续买会员(只能续买1个月、3个月或6个月)时,必须满足以下业务要求:如果end_at早于当前时间,则设置start_at为当前时间,end_at为当前时转载 2020-10-16 16:53:26 · 901 阅读 · 0 评论 -
业务需求:数据库如何保证先查询后插入/更新 原子性?
一、业务需求:当操作积分用户表时,如果accountId在表中没有数据,那么我们新增一条数据,设置用户积分。如果accountId在表中有数据,我们需要更新用户积分。这个操作简单来说就是:在单线程下我们先查询后处理当然没有问题,但是在并发下问题就显而易见了,系统里可能同时插入两条一样的accountId数据。二、问题解决:解决方式一:ONDUPLICATE KEYUPDATE数据库中account_id设置唯一索引,当发现account__...转载 2020-10-16 10:02:41 · 1683 阅读 · 0 评论 -
记一次需要多次调用接口,以防接口数据丢失的写法
问题场景:在项目中存在一些接口调用量比较巨大,超时获取其他异常情况频率比较高。且处理线上Case这些数据又比较重要。在业务方无法保证数据请求的准确性的情况下。要判断其在空或者抛出异常情况下,对接口多次请求,保证数据一定要请求成功。原本简单实现方式:for (int count = 0; count < 3; count++) { Map<String, Strin...原创 2019-09-05 15:26:47 · 1589 阅读 · 0 评论