SQL-如何根据条件插入表格?

时间:2018-08-22 08:30:51

标签: sql postgresql

我有两个表-订单表和库存表。库存表跟踪product_id,product_type和剩余库存量。订单表会记录order_id,product_id和order_amount。订单表通过product_id连接到库存表。

什么是最好的方法来确保我永远不会收到订单中的订单>特定product_id的剩余库存?

似乎不能将INSERT INTOWHERE一起使用-其中,仅当订单金额<剩余库存金额时,我才将订单添加到订单表中。还有另一种方法吗?我愿意更改表格的设置方式。

1 个答案:

答案 0 :(得分:2)

我会在订单表上添加一个触发器。该触发器将从剩余库存量中减去order_amount。这样可以自动计算剩余库存。

此外,我还要添加一张剩余股票价值为>= 0的支票。这样,您将阻止可能剩余剩余库存的订单。该插入将被回滚,因为这将违反库存检查。


CREATE FUNCTION update_inventory_amount()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN
    IF TG_OP = 'INSERT' THEN
        UPDATE
            inventory
        SET
            amount = amount - NEW.order_amount
        WHERE
            product_id = NEW.product_id;
    END IF;

    RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

CREATE TRIGGER update_inventory_amount_trigger
  BEFORE INSERT
  ON orders
  FOR EACH ROW
  EXECUTE PROCEDURE update_inventory_amount();

ALTER TABLE inventory ADD CONSTRAINT amount_check CHECK (amount >= 0);

以上触发代码仅适用于UPDATE。只需一点努力,您就可以扩展它,使其涵盖UPDATEDELETE