2010-07-02 55 views
9

我有一個簡單的問題。香港專業教育學院有一個觸發值插入到另一個數據庫INSERT ON DUPLICATE KEY上的觸發器

因此,舉例來說,如果有兩個值,並觸發在Table A檢查值,並插入到Table B

所以這裏是代碼

-- Trigger DDL Statements 
USE `db`; 
DELIMITER // 

CREATE 
DEFINER=CURRENT_USER() 
TRIGGER `db`.`AFTER_INSERT_A` 
AFTER INSERT ON `db`.`a` 
FOR EACH ROW 
BEGIN 

    IF NEW.val!= NULL 
    THEN 

     UPDATE b SET dateRemove=CURRENT_TIMESTAMP WHERE val=NEW.val; 

     INSERT INTO b (val) VALUES(NEW.val) ON DUPLICATE KEY UPDATE dateRemove=NULL, dateUpdate=CURRENT_TIMESTAMP; 

    END IF; 
END// 

觸發劑量甚至會拋出任何錯誤。我已經在B無值

我的插入是

INSERT INTO a (val) VALUES(`test`) ON DUPLICATE KEY UPDATE dateUpdate=CURRENT_TIMESTAMP 

有沒有人有任何想法。我曾嘗試創建兩個觸發器INSERT和另一個UPDATE,我將AFTER更改爲BEFORE,而我的表b仍然沒有任何結果。任何想法感謝事先

+0

偉大的問題,併成爲老年人。那麼,如果你想在觸發器內同時獲得OLD.val和NEW.val呢? – 2013-02-28 19:38:57

回答

10

觸發對查詢如

INSERT INTO table (x, y, z) VALUES('x', 'y', 'z') ON DUPLICATE KEY UPDATE x=VALUES(x); 

運行必須始終在BEFORE INSERT觸發運行。

+2

我知道這是舊的,但你有證據證明這是真的嗎? – jcoffland 2015-05-01 22:53:23

2

也許來代替

NEW.val!= NULL 

你需要

NEW.val IS NOT NULL 

值永遠不會等於空,這是從來沒有不等於空。

+0

對不起,對於遲到的回覆,我會嘗試這個併發布更新 – 2010-07-02 19:32:27

+0

不會插入表B – 2010-07-04 02:09:58

相關問題