【发布时间】:2009-05-09 09:29:28
【问题描述】:
我有两张桌子 t1 和 t2。我在 t1 上插入后创建了两个触发器 tr1,在 t2 上更新后创建了 tr2。在这两个表中,我正在更新表 t2。因此,它会抛出一个错误,说明 t2 表已经在另一个触发器中更新,因此无法再次更新。
如果有人遇到过此类问题并已解决,请告诉我。
提前致谢! MySQL DBA。
【问题讨论】:
我有两张桌子 t1 和 t2。我在 t1 上插入后创建了两个触发器 tr1,在 t2 上更新后创建了 tr2。在这两个表中,我正在更新表 t2。因此,它会抛出一个错误,说明 t2 表已经在另一个触发器中更新,因此无法再次更新。
如果有人遇到过此类问题并已解决,请告诉我。
提前致谢! MySQL DBA。
【问题讨论】:
如果您想修改 正在更新或插入的数据,您应该使用 BEFORE UPDATE 和/或 BEFORE INSERT 触发器,然后使用 NEW 别名(它引用行,即正在插入或将在应用更新后查看的行)-您实际上可以修改正在插入的字段。 OLD 别名引用应用更新之前的行或删除之前的行(在删除时触发的触发器中)。
因此,对于触发器 tr2,您可能需要以下内容:
DELIMITER $$
CREATE TRIGGER tr2 BEFORE UPDATE ON t2
FOR EACH ROW BEGIN
SET NEW.field1 = some_value_you_want_to_set_it_to;
END;
$$
DELIMITER ;
因为在触发器中,您实际上无法更新已经被更新的表,这是正确的。
【讨论】:
我已经解决了这个问题,当我试图从两个触发器更新和插入同一个表 tb1 时出现问题,但我认为 Mysql 不允许修改同一个表。
谢谢
【讨论】: