【问题标题】:How can I sum two fields and store the result in a third field on a MySQL table autonomously?如何将两个字段相加并将结果自动存储在 MySQL 表的第三个字段中?
【发布时间】:2012-12-23 14:57:02
【问题描述】:

我创建了一个简单的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 对字段求和的事情)

感谢您的帮助

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      相关资源
      最近更新 更多