我创建了一个简单的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更新触发器相关的其他SO问题,并做了一些谷歌搜索,但我还是在这里
这是否超出了MySQL的范围?这似乎是一项常见而又容易实现的任务。
有人知道我是如何自主完成这项任务的吗?(例如,我不想听到关于事后通过PHP对字段求和的说法)
THanks以获取任何帮助
发布于 2012-12-23 23:15:09
问题是您正在尝试修改已被UPDATE + TRIGGER操作使用的表的内容。这是根本不可能做到的,但你有其他选择。
例如,如果您的有意义的数据(或自变量)是价格和运输成本,而总成本取决于它们,那么您可以只在表中保留前两个数据,如果您想要关注总成本,则可以有一个非常简单的视图(如SELECT price, shipping_cost, price+shipping_cost total_cost FROM buybox_rec或任何其他您需要的字段)。
https://stackoverflow.com/questions/14011941
复制相似问题