【问题标题】:Within a transaction check the first update succeeded在事务检查中,第一次更新成功
【发布时间】:2021-08-15 10:50:56
【问题描述】:

如果产品有足够的库存,我打算编写一个 SQL 事务来插入订单(确保没有两个客户同时成功购买只有 1 个库存的产品),如下所示:

START TRANSACTION;
  UPDATE products SET inventory=inventory-1 WHERE product_id=1 AND inventory>=1;
  if (update succeeded) INSERT order ...;
COMMIT;

如何查看商品的库存更新是否成功。我必须使用该程序吗?

【问题讨论】:

  • 为什么order 只有一个product
  • @GordonLinoff 这只是一个例子,一开始我想在TRANSACTION 中实现insert ordersinsert order_products

标签: mysql sql transactions


【解决方案1】:

您可以实现插入订单的 after-update 触发器。您还可以将products.product_id 选择到一个变量中并检查它是否大于0。当然,这种变量方法仅适用于有单个products 记录要更新的情况。如果有多个这样的记录,那么您可以使用游标而不是变量。我相信最简单的方法是实现一个触发器,因此您将在事务中拥有一个可见的操作,并且插入将由幕后的触发器执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多