嘿傢伙我有一個MySQL查詢,減少股票每按一下按鈕,遞減在MySQL停在0
查詢
UPDATE Animals
SET Stock = Stock - 1
WHERE Specie ='{1}' and Country ='{0}'
問題是,我希望它停止在0和沒有進入負面是有辦法做到這一點?
嘿傢伙我有一個MySQL查詢,減少股票每按一下按鈕,遞減在MySQL停在0
查詢
UPDATE Animals
SET Stock = Stock - 1
WHERE Specie ='{1}' and Country ='{0}'
問題是,我希望它停止在0和沒有進入負面是有辦法做到這一點?
這應該工作:
"UPDATE Animals SET Stock = Stock - 1 WHERE Specie ='{1}' and Country ='{0}' and Stock >0"
UPDATE Animals
SET Stock = Stock - 1
WHERE Specie ='{1}' and Country ='{0}' AND Stock > 0
所以限制了行,從而具有Stock > 0
明確
... SET Stock = IF(Stock < 1, Stock, Stock -1)...
,以防止過度的排序,你可能要檢查,看是否有實際存貨,保留備用,然後通過交易做出決定:
START TRANSACTION;
SELECT Stock
FROM Animals
WHERE Specie ='{1}' and Country ='{0}' AND Stock > 0
FOR UPDATE;
如果您沒有獲得記錄,那麼股票是< = 0.如果您獲得了一條記錄,那麼您已經有剩餘的股票數量。
現在更新:
UPDATE Animals SET Stock = Stock - 1 WHERE Specie ='{1}' and Country ='{0}';
COMMIT;
否則,
ROLLBACK;
你要做到這一點在同一個會話(連接)。
即使在非交易方式下,它也可以完美地工作。 'UPDATE'會鎖定該行以更新它,所以如果存在'AND Stock> 0'謂詞,那麼2次會話就不可能減少該值 – zerkms
如果它已經= 0,它會變成負數。 – zerkms
nice catch @zerkms;它已被更新。謝謝。 –