MySQL 中的條件INSERT 語句
問題: 有條件地執行INSERT 操作是否可行,類似於如果
詳細說明:
假設我們需要訂購20 件產品ID 為2 的商品。為了確保庫存充足,我們首先檢查現有數量:
SELECT IF( ( SELECT SUM(qty) FROM orders WHERE product_id = 2 ) + 20 <= ( SELECT qty_on_hand FROM products WHERE id = 2) , 'true', 'false');
如果結果為 true,我們執行 INSERT 查詢。然而,這種方法容易受到並發問題的影響。多個同時訂單可能會導致超賣。
答案:
是的,可以使用以下語法進行條件INSERT 語句:
INSERT INTO TABLE SELECT value_for_column1, value_for_column2, ... FROM wherever WHERE your_special_condition
If SELECT 語句不傳回任何行(即特殊條件為false),不進行插入
範例:
對於給定的schema:
products: id, qty_on_hand orders: id, product_id, qty
insert into orders (product_id, qty) select 2, 20 where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
如果有足夠的數據,此查詢只會插入一行手頭上有庫存。否則,不會執行插入。
以上是MySQL INSERT 語句可以有條件嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!