mysql 限制多次请求_关于多次网络请求并发导致数据库数据重复的问题

背景:近日发现后台服务器有个问题,用户存在重复注册的问题,由于使用第三方账户的授权和登录,有的用户会在网络不好的情况下,多次点击登录授权,因此会造成多次访问提交。采用先向服务器发送ajax网络请求,检查是否有重复注册账户,通过返回的值判定,是登录还是注册;由于手机会因为网络或者内存的问题,导致页面卡顿、缓慢,用户多次点击发送请求,因此会发生多次创建账户的问题。

目的:1、清除数据库中重复的数据;2、采用标识符防止多次访问

补充,对于同一个账户情况下,收藏者多次收藏同一个数据问题,需要使用多个条件的分组条件

select * from `r_tab_memberfavorite` group by openid,content_id having count(*)>1;

此时,显示出来的默认是id编号较小的哪一个数据,删除的时候可以直接使用。

解决方法:

1、首先要查询出那些用户重复注册

mysql的语法两种查询方式

[1]、利用表名称先查询全部的表结果作为一个别名,然后利用原表中查询的唯一建和别名的唯一建进行匹配,返回结果,排序显示(也可以不排序),该方法相对比较慢

select * from `r_tab_member` a where ((select count(*) where openid=a.openid)>1) order by desc;

[2]、使用group by 语句+having +聚合函数对结果进行过滤得到重复的关键字的数据分组,然后查询出所有的结果

select * from `r_tab_member` where openid in (select openid from `r_tab_member` group by openid having count(openid)>1;

[3]、删除重复的数据,只保留一条

delete from `r_tab_member` where openid in (select openid from `r_tab_member` group by openid having count(openid>1)) and id not in (select min(id) from `r_tab_member` group by openid having count (openid)>1);

2、可以在客户端进行约束,也可以在服务端进行约束

客户端相对容易,只需要在用户点击授权后对该方法进行标识位的锁定,等到服务器返回结果,方法执行完毕,解锁,方能够进行二次操作。

服务端没有测试,思路:将检查重复的方法和创建用户的方法合二为一,再进行相应的数据库操作线程锁定,保证只有一个线程能成功的创建数据,其他的只能失败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值