每个商品每天限量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 加一个唯一索引是最简单的办法了。
4 回答1.2k 阅读✓ 已解决
8 回答1.2k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
1 回答956 阅读✓ 已解决
2 回答839 阅读✓ 已解决
2 回答1.7k 阅读
ID 列创建唯一索引。
后提交的数据会发生异常,之后可以在异常处理中重试。