gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:17:03 26 4
gpt4 key购买 nike

我有一个表 new,其中包含列 stockdelivery_days

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

我试过:

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

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

检查状态:

BEGIN
DECLARE `status` INT(11);

IF stock >= 1 and ddays = 0 THEN SET `status` = 1;
ELSE SET `status` = 0;
END IF;

RETURN `status`;
END

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

最佳答案

当你想更改正在插入/更新的行的列时,不要使用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 ,因为这会使您的代码对任何阅读它的人造成混淆。

关于更新或插入时触发 mysql - 更新受影响行中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com