首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL事务-在队列中处理拍卖出价插入?

问MySQL事务-在队列中处理拍卖出价插入?
EN

Stack Overflow用户
提问于 2012-01-14 06:42:37
回答 2查看 922关注 0票数 0

我目前正在开发一个拍卖网站作为投资组合项目的一部分,我遇到了一个有趣的问题,似乎无法解决。

目前,我正在检查当前的最高出价(查询1),然后如果出价高于当前存储的出价,则将新的出价插入数据库(查询2)。相当基本的逻辑,显然,如果出价较低,那么最终将通知用户。

代码语言:javascript
复制
Query 1:    

$result = mysql_query("SELECT * FROM bids WHERE item_id = '".$_POST['id']."' ORDER BY bids.amount DESC LIMIT 1");

Query 2:

    $query = sprintf("INSERT INTO bids(item_id,buyer_id,amount,created) VALUES('%s','%s','%s',NOW())",
                mysql_real_escape_string($item_id),     
                mysql_real_escape_string($user_id),     
                mysql_real_escape_string($amount));

注意:我知道这段代码存在主要的安全问题,但这只是一个例子……

然而,我不确定是否会有这样一种情况,在检查价格和插入数据库之间,另一个查询实际上可以更快地进行,插入到数据库中,然后破坏当前的竞价逻辑。

使用带有mysqli或PDO驱动程序的事务足以确保出价正确排队吗?

MySQL是否提供了一种对mysql查询进行排队的方法来确保这种情况不会发生?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-14 07:01:57

一种可能的方法是使用select for update,如果禁用自动提交,则锁定选定的行。此时,如果出价较高,则插入新的出价并提交事务;如果出价较低,则可以通知用户并回滚(或提交)事务

票数 2
EN

Stack Overflow用户

发布于 2012-01-14 10:05:55

就我个人而言,我会有一个第二个表,存储所有的出价,并定期更新主要出价。这样,主bid将只从单一来源更新,并且您永远不会有双重写入问题。

因此,例如,在表mainBid中设置了主要投标金额。人们的出价将存储在tempBid中,每X秒一次,您将从tempBid检索最高出价以更新mainBid

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8858248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档