2009-05-04 43 views
0

好了,我已經開始寫我在mysql中第一個觸發器,它不給一個錯誤,但它不工作,要麼...第一mysql的觸發失敗

DELIMITER $$ 

DROP TRIGGER `cc`.`update_expires_date_trig`$$ 
CREATE TRIGGER `update_expires_date_trig` BEFORE INSERT ON `credit_test_acc` 
FOR EACH ROW BEGIN 
    UPDATE credit_test_acc SET date_expires_acc = DATE_ADD(CURDATE(), INTERVAL 6 MONTH) WHERE type_acc = 'init' 
END; 
$$ 
DELIMITER ; 

我有2個問題:因爲它已經被用於通過調用這個存儲函數/觸發聲明

  1. 無法更新在存儲函數/觸發器表「credit_test_acc」。

  2. 定義的觸發器是否會更新JUST插入的行或數據庫中的每行?

回答

1

據我所知,它必須重寫這樣,你期望它的工作的工作:

DELIMITER $$ 

DROP TRIGGER `cc`.`update_expires_date_trig`$$ 
CREATE TRIGGER `update_expires_date_trig` BEFORE INSERT ON `credit_test_acc` 
FOR EACH ROW BEGIN 
    SET NEW.date_expires_acc = DATE_ADD(CURDATE(), INTERVAL 6 MONTH) 
END; 
$$ 
DELIMITER ; 

凡新指的是有關行要插入到表。你沒有給出任何解釋,說明'type_acc'在這裏可能扮演什麼角色(我可以想到它可以被解釋的多種方式),所以我把它拋棄了。如果這是我的想法,可以這樣應用:

IF NEW.type_acc = 'init' THEN # do whatever you want here 
0

觸發器無法更改觸發它的表。
直接或間接。

您只能更改BEFORE觸發器中的值SET new.field = newvalue
這隻能影響拉動觸發器的「當前」行(可以這麼說)。