【问题标题】:Update error in my Products table after creating AFTER UPDATE trigger创建 AFTER UPDATE 触发器后更新我的 Products 表中的错误
【发布时间】: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,但篮子可以更新篮子中满足条件中描述的尽可能多的行你的程序。

标签: mysql triggers


【解决方案1】:

这相当于你的代码尝试

CREATE TRIGGER `lakcom_NewDB`.`Products_AFTER_UPDATE` 
    AFTER UPDATE ON `Products` 
    FOR EACH ROW
        BEGIN
            update Basket 
              set Basket.ToControl = 1 
              where Basket.Product_id=new.product_id 
              and Basket.id<>0;
        END 

样本数据和预期结果会对您有所帮助

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多