0

我创建了一个简单的UPDATE AFTER INSERT触发器,用于求和两个DECIMAL(10,2)字段,并用求和值更新第3个DECIMAL(10,2)字段。如何求和两个字段并将结果自动存储在MySQL表的第三个字段中?

触发代码:

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问题,并做了一些Google搜索,但我在这里。

这是否超出了MySQL的范围?这似乎是一个容易的任务。

有谁知道我是如何自主完成这项任务的? (AKA我不想听到关于通过PHP事后总结的领域,例如)

感谢所有帮助

回答

0

的问题是,你要修改表的内容已被UPDATE + TRIGGER操作使用。这根本不能做到,但你有其他选择。例如,如果您的有意义的数据(或自变量)是价格和运输成本,而总成本取决于它们,则可以只保留表中的前两个,并且可能有一个非常简单的VIEW(类似于SELECT price, shipping_cost, price+shipping_cost total_cost FROM buybox_rec,或其他任何你需要的领域),如果你想要关注整体。

相关问题