一条语句,就是插入时的验证条件
INSERT INTO vote_log(p_id, openid, status) select 216, '12313', 1 where (select count(*) from vote_log) <=3
在并发下,依然插入N条数据。
一条语句,就是插入时的验证条件
INSERT INTO vote_log(p_id, openid, status) select 216, '12313', 1 where (select count(*) from vote_log) <=3
在并发下,依然插入N条数据。
看项目大小和用户量多少,如果不多的话直接使用mysql也行
1.增加一张表记录用户投票数记录,用户 | 投票数 | 时间;
2.查询当前用户投票数是否大于3大于直接返回;
3.每次操作业务更新投票数,update table set 投票数 = 投票数+1 where 用户 + 投票数 <3。只有修改成功的可以下一步业务操作,否则返回。这里主要用到mysql更新同一行时会锁行,同时修改事当前读,获取到的投票数是最新值
4 回答1.5k 阅读✓ 已解决
8 回答1.3k 阅读
3 回答965 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.8k 阅读
2 回答1.7k 阅读
1 回答901 阅读✓ 已解决
mysql 自身无法达到你的需求
这条 sql 如果是做业务限制的话,改为前面加个缓存来处理这个逻辑.
如果这个 sql 不做业务限制,只是限制日志写入的话,加个队列,异步顺序处理也可以了.