如何将两个字段相加并将结果自动存储在MySQL表的第三个字段中?

时间:2012-12-23 14:57:02

标签: mysql stored-procedures triggers sql-update mysql-error-1442

我创建了一个简单的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的范围?这似乎是一项普遍而容易的任务。

有谁知道我是如何自主完成这项任务的? (例如,AKA我不想听到通过PHP对事件进行求和的总结)

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

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

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