簡體   English   中英

MySQL刪除觸發器不更新其他表列

[英]MySQL delete trigger not updating other table column

我有一個products表,該表的quantity_on_hand列在插入/更新/刪除事務時需要更新。 在插入表中,我已按事務中的數量減少了該字段,而在更新中,我已根據事務中的NEWOLD值進行了減少和添加。 DELETE觸發器中,我只是基於OLD交易值添加了庫存。

INSERTUPDATE觸發器工作正常,但DELETE觸發器既未正確更新,也未生成任何錯誤! 這是代碼:

插入觸發器(工作中)

CREATE TRIGGER `tr_stockout_ai` AFTER INSERT ON `stockout` 
FOR EACH ROW BEGIN
UPDATE stockin SET qoh = qoh - NEW.qty WHERE id_stockin = NEW.id_stockin;
END;
$$

更新觸發(工作中)

CREATE TRIGGER `tr_stockout_au` AFTER UPDATE ON `stockout` 
FOR EACH ROW BEGIN
UPDATE stockin SET qoh = qoh + OLD.qty WHERE id_stockin = OLD.id_stockin;
UPDATE stockin SET qoh = qoh - NEW.qty WHERE id_stockin = NEW.id_stockin;
END;
$$

刪除觸發操作不正確

CREATE TRIGGER `tr_stockout_ad` AFTER DELETE ON `stockout` 
FOR EACH ROW BEGIN
UPDATE stockin SET qoh = qoh + OLD.qty WHERE id_stockin = OLD.id_stockin;
END;
$$

有人可以告訴我我在這里想念的嗎? 請注意,沒有語法錯誤,代碼可以很好地創建觸發器,並且在執行觸發器並且MySQL沒有報告任何錯誤代碼時也沒有顯示錯誤! 我嘗試從AFTER更改為BEFORE但問題仍然相同。 刪除一行后, qoh的值保持不變!

這個問題仍然存在。 我在運行MySQL 5.5的基於cPanel的環境中的其他MySQL數據庫服務器上進行了測試。 我的開發服務器和此生產服務器上的環境大致相同,並且問題相同。 Variable_name值innodb_version 1.1.8版本5.5.22-cll version_comment MySQL社區服務器(GPL)

更新:當直接在stockout表上給出delete命令時(即delete from stockout where id_stockout=12stockoutdelete from stockout where id_stockout=12 DELETE觸發器執行得很好 但是,如果我們要刪除該stockout表上具有級聯刪除功能的表上的行,則級聯刪除有效,但沒有執行stockout的刪除觸發器。 例如,表salesinv_det_items具有主鍵作為stockout外鍵,並且該關系是級聯的。 每當我們在刪除一行salesinv_det_items在相應的外鍵行stockout被刪除,但在刪除觸發器stockout不執行。

OP寫道:

答: MySQL自5.0發行以來存在一個錯誤,到現在為止該錯誤尚未解決,該錯誤不會從外鍵級聯操作觸發觸發器。 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

它說: 當前,級聯的外鍵動作不會激活觸發器。

看起來很神奇,但這是真的!

答案是不要讓外鍵級聯,而要編寫觸發器來代替它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM