我正試圖制定在我的應用程序中停止雙「預訂」的最佳方法。mySQL - 防止重複預訂
我有一個唯一的ID表,每個只能出售一次。
我目前的想法是使用一個事務來檢查選擇的產品是否可用,如果它們隨後插入一個'保留'的'狀態'列並插入'更新時間',那麼如果用戶繼續支付我更新狀態爲「已售出」。
每隔10分鐘,我對'status'='reserved'進行cron作業檢查,檢查超過10分鐘以前並刪除這些行。
有沒有更好的方法?我從來沒有使用過交易(我剛剛聽到過這個詞),所以如果有人能解釋我將如何做到這一點將是王牌。
我覺得這可能是這種情況,這就是爲什麼我問這個問題(而不是僅僅試圖去做)。所以我可以鎖定一行以便它不能被讀取 - 從而實現'保留'狀態。 – Mark 2009-11-12 17:04:20
如果是這樣的話,可以鎖定多久?如果用戶剛剛關閉了網站,我該如何「解鎖」它? – Mark 2009-11-12 17:06:31
事務可以配置爲超時,並且當它們超時時,鎖定的行將被釋放,並且任何更改都將回滾到其先前的狀態。 MySQL中的相關設置是innodb_lock_wait_timeout = 50(假設您使用innodb存儲引擎,很可能)。 – 2009-11-12 17:17:16