每个商品每天限量1000份、10点开抢。 select count from table where date = 年月日 for update 加锁。取到当天已经卖出去多少份了。如果没超过1000 就继续下面的购买操作。操作完成 这个表count+1.然后commit事务。现在出现的问题是。同一天会出现大于1条的数据。
百度了一下可能是因为没有数据,就不会加锁
这种情况。应该咋解决?
每个商品每天限量1000份、10点开抢。 select count from table where date = 年月日 for update 加锁。取到当天已经卖出去多少份了。如果没超过1000 就继续下面的购买操作。操作完成 这个表count+1.然后commit事务。现在出现的问题是。同一天会出现大于1条的数据。
百度了一下可能是因为没有数据,就不会加锁
这种情况。应该咋解决?
首先你百度的这个说明不对,数据不存在时除了加table lock(IX),还会加一个gap lock,但是在程序中不要使用这种方式,很容易出现死锁。对于你这种情况date 加一个唯一索引是最简单的办法了。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
ID 列创建唯一索引。
后提交的数据会发生异常,之后可以在异常处理中重试。