2017-08-25 80 views
0

編輯:這篇文章已解決。我有一個愚蠢的錯誤。我的更新查詢沒有改變更改字段的值,觸發器只捕獲第一個值更改。對不起!更新後觸發器確實考慮到所有更新值

我有一個觸發器不考慮更新查詢中的所有更新字段。

這裏是我的觸發history_transaction,爲status我只審計變化表transac_transaction

CREATE TRIGGER history_transaction 
AFTER UPDATE ON transac_transaction 
FOR EACH ROW 
    BEGIN 
    IF(OLD.status <> NEW.status) THEN 
     INSERT INTO transac_transaction_history(transac_id, author,  old_data, new_data, date_upd) 
    VALUES (OLD.id, OLD.last_author_id_update, OLD.status, NEW.status, NOW()); 
    END IF; 

    IF(OLD.price_asked <> NEW.price_asked) THEN 
     INSERT INTO transac_transaction_history(transac_id, author, old_data, new_data, date_upd) 
    VALUES (OLD.id, OLD.last_author_id_update, OLD.price_asked, NEW.price_asked, NOW()); 
     END IF; 
    END; 
$$ 

price_asked領域如果我執行更新,如:

update transac_transaction set price_asked=12.00, status=1 where id=2; 

我只會有一個插入在price_asked更改的審計表中,而不是狀態。

東西在我的觸發器中可能會循環丟失字段? 我覺得每一行都沒有考慮到更新的所有字段。

非常感謝。

回答

0

我想你應該考慮NULL值: 你可以嘗試對矯正

IF(OLD.status <> NEW.status) 

IF(OLD.status <> NEW.status 
    OR ((OLD.status IS NULL OR NEW.status IS NULL) AND OLD.status IS NOT NULL A NEW.status IS NOT NULL)) 

與同爲price_asked

+0

我只是意識到,觸發器在另一個mariaDB實例和Mysql上運行良好。也許版本問題...我調查...謝謝你的解決方案 – iKonenn

+0

我有mariadb 10.2.3。在preprod服務器上,我們有10.0.29 – iKonenn

0

都是我的錯。我的更新查詢保持第二個字段的相同值... 所有工作正常。