使用MySQL更新触发器后基于INT值更改更新另一个表中的列

使用MySQL更新触发器后基于INT值更改更新另一个表中的列,mysql,triggers,Mysql,Triggers,一个错误接一个错误。基本上,如果更新产品库存表时,可用列大于0(即至少有一个库存),我会在产品表中将列值自动设置为1 MPN在myproducts表中是唯一的外键,因此只要表product\U stock中列available中的正值,则products表中MPN的值应设置为1 我正在使用的两个表: 1. 2. 还有我的扳机的一个变种 DELIMITER $$ CREATE TRIGGER ps_update AFTER UPDATE ON `product_stock` FO

一个错误接一个错误。基本上,如果更新
产品库存
表时,
可用
列大于0(即至少有一个库存),我会在
产品
表中将列值自动设置为
1

MPN在my
products
表中是唯一的外键,因此只要表
product\U stock
中列
available
中的正值,则
products
表中
MPN
值应设置为
1

我正在使用的两个表:

1. 2. 还有我的扳机的一个变种

DELIMITER $$

    CREATE TRIGGER ps_update AFTER UPDATE ON `product_stock`
    FOR EACH ROW BEGIN
      IF NEW.available > 0 THEN
            SET products.in_stock = 1;
      ELSE
            SET products.in_stock = 0;
      END IF;
    END$$

DELIMITER ;
错误代码

1193-未知系统变量“库存中”
不能单独使用
SET
更新另一个表中的值。您需要使用适当的
UPDATE
语句来执行此操作

我还添加了更多的条件,这样它就不会每次都触发
UPDATE
查询。只有当所需库存中的
值发生变化时,才会触发
UPDATE

DELIMITER $$
CREATE TRIGGER ps_update AFTER UPDATE ON `product_stock`

    FOR EACH ROW BEGIN

      -- update only when there is a change in the available
      IF NEW.available <> OLD.available THEN 

        -- update only when item becomes in_stock
        IF NEW.available > 0 AND OLD.available <= 0 THEN 
            UPDATE products 
            SET products.in_stock = 1 
            WHERE products.mpn = NEW.mpn;

        -- update only when item becomes out_stock
        ELSEIF NEW.available <= 0 AND OLD.available > 0 THEN 
            UPDATE products 
            SET products.in_stock = 0 
            WHERE products.mpn = NEW.mpn;
        END IF;
      END IF;
   END $$
DELIMITER ;
分隔符$$
在“产品库存”更新后创建触发器ps\U更新`
每行开始
--仅当可用资源发生更改时更新
如果NEW.available.OLD.available,则
--仅在项目有库存时更新

如果NEW.available>0,而OLD.available甚至不想包含这个词:)谢谢你指出这一点。用新的错误消息更新了我的问题。@BrianBruman检查更新的答案。您需要使用更新queryAwesome!它起作用了。唯一缺少的是开头的
分隔符$$
,以便查询处理它并启用触发器。但是,是的,只是测试了一下,它就工作了。非常感谢。@BrianBruman检查进一步更新的答案。我已经对它进行了优化。当然,它做到了。即使一个尺寸/行有0可用,它也将恢复为缺货(即使其他尺寸/行有库存)。你让我走上了正轨,再次感谢你。
DELIMITER $$

    CREATE TRIGGER ps_update AFTER UPDATE ON `product_stock`
    FOR EACH ROW BEGIN
      IF NEW.available > 0 THEN
            SET products.in_stock = 1;
      ELSE
            SET products.in_stock = 0;
      END IF;
    END$$

DELIMITER ;
DELIMITER $$
CREATE TRIGGER ps_update AFTER UPDATE ON `product_stock`

    FOR EACH ROW BEGIN

      -- update only when there is a change in the available
      IF NEW.available <> OLD.available THEN 

        -- update only when item becomes in_stock
        IF NEW.available > 0 AND OLD.available <= 0 THEN 
            UPDATE products 
            SET products.in_stock = 1 
            WHERE products.mpn = NEW.mpn;

        -- update only when item becomes out_stock
        ELSEIF NEW.available <= 0 AND OLD.available > 0 THEN 
            UPDATE products 
            SET products.in_stock = 0 
            WHERE products.mpn = NEW.mpn;
        END IF;
      END IF;
   END $$
DELIMITER ;