更新或插入时触发mysql-在受影响的行/行中更新字段

我有表GL_LEQUAL,其中有列newstock

我需要在库存或交货日期发生更改时更新/插入行时,触发器必须更新字段delivery_days,可以通过调用CheckStatus(stock,delivery_days)函数来接收该字段并返回0或1

我尝试过:

status

但是它不会运行,因为它将无限循环。

CheckStatus:

BEGIN
            IF NEW.stock != OLD.stock or NEW.delivery_days != OLD.delivery_days
            THEN 
            UPDATE new set status = CheckStatus(stock,delivery_days);
            END IF;
END

小提琴示例https://www.db-fiddle.com/f/tvGDajBRxUrHVvWjFnaiYu/0

sky03191 回答:更新或插入时触发mysql-在受影响的行/行中更新字段

如果要更改要插入/更新的行的列,请不要使用UPDATE,而要使用SET NEW.status = ...,这样只会更改生成触发器的当前行的值。

还必须将其他列限定为NEW.stockNEW.delivery_days

BEGIN
  IF NEW.stock != OLD.stock or NEW.delivery_days != OLD.delivery_days
  THEN 
    SET NEW.status = CheckStatus(NEW.stock,NEW.delivery_days);
  END IF;
END

我同意上面的评论,即您不应为表new或其他任何SQL keyword or reserved word命名,因为它会使您的代码与阅读它的人混淆。

本文链接:https://www.f2er.com/3165911.html

大家都在问