gpt4 book ai didi

MySQL INSERT IF(自定义 if 语句)

转载 作者:IT老高 更新时间:2023-10-28 23:42:23 25 4
gpt4 key购买 nike

首先,这是问题的简明摘要:

是否可以有条件地运行 INSERT 语句?类似的东西:

IF(expression) INSERT...

现在,我知道我可以使用存储过程来做到这一点。我的问题是:我可以在我的查询中这样做吗?


现在,我为什么要这样做?

假设我们有以下 2 个表:

products: id, qty_on_hand
orders: id, product_id, qty

现在,假设有 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 查询。
到目前为止一切顺利。


但是,并发存在问题。
如果有 2 个订单正好同时进来,他们可能在其中任何一个进入订单之前都读取了现有数量。然后他们都会下订单,从而超出qty_on_hand


那么,回到问题的根源:
是否可以有条件地运行 INSERT 语句,以便我们可以将这两个查询合并为一个?

我搜索了很多,我能找到的唯一类型的条件 INSERT 语句是 ON DUPLICATE KEY,这显然不适用于这里。

最佳答案

INSERT INTO TABLE
SELECT value_for_column1, value_for_column2, ...
FROM wherever
WHERE your_special_condition

如果选择没有返回任何行(因为您的特殊条件为假),则不会发生插入。

使用问题中的架构(假设您的 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 语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6854996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com