【发布时间】:2012-01-26 16:31:42
【问题描述】:
我目前正在研究如何在我的拍卖网站项目中管理大量出价。由于很可能有些人可能会在同一时间发送投标,因此很明显我需要确保有锁以防止任何数据损坏。
我已经开始使用SELECT LOCK IN SHARE MODE,它声明If any of these rows were changed by another transaction that has not yet committed, your query waits until that transaction ends and then uses the latest values.
http://dev.mysql.com/doc/refman/5.1/en/innodb-locking-reads.html
这向我表明,投标将进入一个队列,在该队列中处理和检查每个投标,以确保投标高于当前投标,如果在此队列中插入插入后发生变化,则最新投标金额被使用。
但是,我了解到,如果两个用户尝试同时出价并且没有查询可以保持锁定,则可能会出现破坏性死锁问题。因此我也考虑过使用SELECT FOR UPDATE,但这也会禁用我不太确定的任何读取。
如果有人能对这个问题有所了解,将不胜感激,如果您能推荐任何其他数据库,如 NoSQL 更合适,那将非常有帮助!!!
编辑:这本质上是一个并发问题,我不想使用不正确/旧数据检查当前出价,因此会在某些出价上产生“丢失更新”。
【问题讨论】:
标签: php mysql sql locking innodb