for update遇到的问题。

每个商品每天限量1000份、10点开抢。 select count from table where date = 年月日 for update 加锁。取到当天已经卖出去多少份了。如果没超过1000 就继续下面的购买操作。操作完成 这个表count+1.然后commit事务。现在出现的问题是。同一天会出现大于1条的数据。
clipboard.png
百度了一下可能是因为没有数据,就不会加锁

clipboard.png
这种情况。应该咋解决?

阅读 2.3k
2 个回答

ID 列创建唯一索引。
后提交的数据会发生异常,之后可以在异常处理中重试。

首先你百度的这个说明不对,数据不存在时除了加table lock(IX),还会加一个gap lock,但是在程序中不要使用这种方式,很容易出现死锁。对于你这种情况date 加一个唯一索引是最简单的办法了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题