gpt4 book ai didi

MySQL - 特定列上的更新触发器影响表中的所有行

转载 作者:行者123 更新时间:2023-11-29 01:56:27 24 4
gpt4 key购买 nike

在我的数据库 (MySQL) 中,我有以下触发器 -

CREATE TRIGGER inventory_qty_trigger 
AFTER UPDATE OF inventory_sku_quantity ON inventory_sku
BEGIN
UPDATE inventory_sku
SET inventory_sku_quantity = 0
WHERE NEW.inventory_sku_quantity < 0;
END;

目标是使 inventory_sku_quantity小于零时为零。但我们观察到的是,当我们更新 sku 数量小于零的项目时,所有 sku 数量都变为零。

似乎 where 条件不正确 - WHERE NEW.inventory_sku_quantity < 0;而应该是

CREATE TRIGGER inventory_qty_trigger 
AFTER UPDATE OF inventory_sku_quantity
ON inventory_sku
BEGIN
UPDATE inventory_sku
SET inventory_sku_quantity = 0
WHERE inventory_id = NEW.inventory_id
AND NEW.inventory_sku_quantity < 0;
END;

总结两个问题:

  1. 是否允许使用 AFTER UPDATE触发重置受影响的列值。
  2. 我们有触发器的问题使所有行 inventory_sku_quantity变成零。

相反,我只希望受影响的行为零,这意味着在 WHERE 中添加一个额外条件条款。

最佳答案

NEW.inventory_sku_quantity新插入行的值。因此,您的代码基本上对新插入的行符合某些条件的每一行执行更新,这将是所有这些条件,因为行的内容不会影响条件。

无需更新,您只需在 before update 触发器中设置新行的值:

CREATE TRIGGER inventory_qty_trigger 
BEFORE UPDATE OF inventory_sku_quantity
ON inventory_sku
BEGIN
IF NEW.inventory_sku_quantity < 0 THEN
SET NEW.inventory_sku_quantity = 0
END IF;
END;

关于MySQL - 特定列上的更新触发器影响表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660300/

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