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中文网其他相关文章!