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

标签 mysql function triggers

我有一个表 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/

相关文章:

php - 从 2 个表中获取数据并插入到另一个表中

MySql 将长unix转换为时间戳(以毫秒为单位)

python - python中的shell脚本中的 "&"相当于什么

Mysql/MariaDB 触发器问题和调试

mysql - mybb 如何为某些论坛设置默认前缀向 mybb_threads 表添加触发器

MySQL:SELECT * FROM 表 WHERE 字段 ="some text"不起作用

function - 有没有办法在 Lua 中将本地函数按任意顺序排列?

c++ - 推送到作为函数参数传递的队列

javascript - 使用jQuery在mouseenter上触发asp.net linkbutton的点击事件

mysql - 我正在使用此 sql 语句从表中删除总记录