使用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在myproducts
表中是唯一的外键,因此只要表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 ;