【发布时间】:2021-02-02 14:30:19
【问题描述】:
我插入了一个简单的过程 (_ControlProduct),它在 SQL 中运行良好 我是从 Products Table 中的 AFTER UPDATE 触发器调用它,但是我遇到了这个错误
错误 1109:1109:字段列表中的未知表“产品”
SQL 语句:
UPDATE `lakcom_NewDB`.`Products`
SET `SuppCat_id` = '2'
WHERE (`Product_id` = '43')
我的触发器是:
CREATE TRIGGER `lakcom_NewDB`.`Products_AFTER_UPDATE`
AFTER UPDATE ON `Products`
FOR EACH ROW
BEGIN
call _controlproduct(Products.Product_id);
END
我的 _ControlProduct 是:
CREATE PROCEDURE `_ControlProduct`(Product int)
BEGIN
update Basket
set Basket.ToControl = 1
where Basket.Product_id=Product
and Basket.id<>0;
END
【问题讨论】:
-
并不是我认为这实际上是问题的原因,因为 MySQL 抱怨您实际上没有发布的更新,但是当您在
_controlproduct(Products.Product_id);中说Products.Product_id时,您认为 MYSQL会明白它的意思吗?如果您尝试引用已更新的行,则可以使用 OLD 或 NEW 伪表。 Products.product_id 是一个列,在上下文中相对没有意义 -
从触发器调用过程似乎没有多大意义,我想知道为什么认为这是一件明智的事情。
-
据我了解,触发器仅适用于实际更新的记录。每当更新任何记录时,我都想调用我的过程,这就是为什么我要让 id 字段将其用作参数来更新 y 篮子表中的相关记录
-
'根据我的理解,触发器仅适用于实际更新的记录'不会处理 FOR EACH ROW,但篮子可以更新篮子中满足条件中描述的尽可能多的行你的程序。