MySQL INSERT IF(自定义if语句)
首先,这是问题的简要摘要:
是否可以INSERT
有条件地运行语句?类似于以下内容:
IF(expression) INSERT...
现在,我知道可以使用存储过程来做到这一点。我的问题是:我可以在查询中这样做吗?
现在,我为什么要这样做?
假设我们有以下两个表:
products: id, qty_on_handorders: id, product_id, qty
现在,假设有一个订购20个Voodoo娃娃(产品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
查询。
到目前为止,一切都很好。
但是,并发性存在问题。
如果有2个订单 恰好同时出现 ,则他们可能都在任何一个都输入订单之前都读取了现有数量。然后,他们都会下订单,因此超过了qty_on_hand
。
因此,回到问题的根源:
是否可以INSERT
有条件地运行一条语句,以便我们可以将这两个查询组合为一个?
我搜索了很多东西,而INSERT
我能找到的唯一条件语句类型是ON DUPLICATE KEY
,显然在这里不适用。
回答:
INSERT INTO TABLESELECT value_for_column1, value_for_column2, ...
FROM wherever
WHERE your_special_condition
如果选择未返回任何行(因为特殊条件为false),则不会发生插入。
使用问题中的架构(假设您的id
列为auto_increment
):
insert into orders (product_id, qty)select 2, 20
where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
如果手头的库存不足,则不会插入任何行,否则将创建订单行。
好主意顺便说一句!
以上是 MySQL INSERT IF(自定义if语句) 的全部内容, 来源链接: utcz.com/qa/435463.html