2

我目前正在开发一个简单的拍卖网站。我将出价存储在他们自己的名为“出价”的 MySQL 表中。我想知道确保不会同时提交两个相同投标的最佳方法是什么。

我目前验证提交的出价实际上是最高出价的策略是执行以下操作(例如):

$sql = "SELECT * FROM bids WHERE amount >= '".$bidamount."'";
$result = mysql_query($sql);
if(mysql_num_rows($result) == 0) {
    $sql = "INSERT INTO bids SET amount = '".$bidamount."'";
    mysql_query($sql);
    $bidid = mysql_insert_id();
}

上述查询集的问题在于,在运行 SELECT 查询和运行 INSERT 查询之间,另一个用户可以插入相同的出价。

是否有某种方法可以在 SELECT 期间锁定表以防止这种双重出价发生?当你有很多人同时出价时,我对为此目的锁定表的主要担忧是性能问题。

4

1 回答 1

0

您可能想要进行条件插入,例如:

$amount = intval($amount);
$query = "
    INSERT INTO 
        bids(amount) 
    SELECT 
        {$amount} 
    FROM 
        (SELECT 1) tmp_tbl 
    WHERE NOT EXISTS(
        SELECT * FROM bids WHERE amount >= {$amount}
    )
";

并检查受影响的(插入的)行。

于 2012-11-19T19:09:18.647 回答