0

我创建了一个简单的UPDATE AFTER INSERT触发器来对两个字段求和并用求和值DECIMAL(10,2)更新第三个字段。DECIMAL(10,2)

触发代码为:

delimiter |
CREATE TRIGGER calc_ttl_cost AFTER INSERT ON buybox_rec
  FOR EACH ROW 
  BEGIN
      UPDATE buybox_rec SET total_cost = (price+shipping_cost);
  END;
|

我正在使用 phpMyAdmin 运行 SQL 命令,因此我知道触发器已成功创建。此外,如果我UPDATE buybox_rec SET total_cost = (price+shipping_cost);单独运行 SQL 语句,它会按预期工作。(我也尝试过在字段名称周围使用反引号的相同代码,但如果可行,我不会写所有这些)

问题是当我插入一个新行时,触发器不起作用并抛出此错误:

#1442 - Can't update table 'buybox_rec' in stored function/trigger 
because it is already used by statement which invoked this stored 
unction/trigger. 

该错误似乎是某种递归或循环引用问题,但我无法弄清楚问题出在哪里/是什么。

我还尝试创建一个存储过程并从触发器中调用它以尝试获得相同的结果,但我得到了同样的错误。

我检查了一堆与 MySQL UPDATE 触发器相关的其他 SO 问题并进行了一些谷歌搜索,但我在这里。

这超出了 MySQL 的范围吗?这似乎是一项常见且容易完成的任务。

有谁知道我如何自主完成这项任务?(例如,我不想听到通过 PHP 对字段求和的事情)

谢谢你的帮助

4

1 回答 1

0

问题是您正在尝试修改已被 UPDATE + TRIGGER 操作使用的表的内容。这根本无法做到,但您有其他选择。

例如,如果您的有意义的数据(或自变量)是价格和运输成本,而总成本取决于它们,您可以只保留表中的前两个,并且可能有一个非常简单的 VIEW(类似于SELECT price, shipping_cost, price+shipping_cost total_cost FROM buybox_rec,或其他任何一个)您需要的字段)如果您想关注总数。

于 2012-12-23T15:15:09.353 回答