我目前正在开发一个简单的拍卖网站。我将出价存储在他们自己的名为“出价”的 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 期间锁定表以防止这种双重出价发生?当你有很多人同时出价时,我对为此目的锁定表的主要担忧是性能问题。