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,或其他任何你需要的領域),如果你想要關注整體。

相關問題