我有拍賣的一個表,其中多個用戶投標拍賣處理在數據庫中同一時間多個條目使用PHP
ID | BidderID | AuctionID | HighestBidPrice
------------------------------------------------
1 | 1 | 35 | 100
2 | 2 | 35 | 200
3 | 3 | 35 | 200
4 | 2 | 35 | 300
5 | 3 | 35 | 300
當用戶使在同一時間兩個投標出價成爲插入表。我正在嘗試編寫代碼來處理特定AuctionID的這種類型的死鎖條件。甚至不應該有用戶能夠插入更低的價格,然後最後HighestBidPrice。
我檢查車況表的查詢關鍵詞,比如
$last_bid = $this->db->query("select * from Auction as A where A.AuctionID = 35 order by ID desc limit 1")->result_array();
首先我得到的最後一個最高競標價,然後檢查
if($last_bid){
if(isset($last_bid[0]['HighestBidPrice']) && $last_bid[0]['HighestBidPrice']!=""){
if($last_bid[0]['HighestBidPrice'] === $_POST['HighestBidPrice']){
echo "The Bid with this price already made.";
}
if($last_bid[0]['HighestBidPrice'] >= $_POST['HighestBidPrice']){
echo "The Bid price is less then Highest Bid Price.";
}
}
}
甚至比如果多個用戶同時放插入一個投標雙方都能夠出價。
是交易能夠解決這個問題嗎?
我認爲代替'transaction',你必須在插入時鎖定和解鎖表格。請參閱:http://www.mysqltutorial.org/mysql-table-locking/ –
如果我鎖定表格,那麼用戶同時進行的其他出價的結果會是什麼? –
在這種情況下,第二個或隨後的請求將等到第一個請求完成並解鎖表。 –