开发者社区> 问答> 正文

MySQL INSERT IF(自定义if语句)?mysql

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

是否可以INSERT有条件地运行语句?类似于以下内容:

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

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

假设我们有以下两个表:

products: id, qty_on_hand orders: 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,显然在这里不适用。

展开
收起
保持可爱mmm 2020-05-17 17:37:49 1084 0
1 条回答
写回答
取消 提交回答
  • INSERT INTO TABLE SELECT 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; 如果手头的库存不足,则不会插入任何行,否则将创建订单行。

    好主意顺便说一句!来源:stack overflow

    2020-05-17 17:45:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像