2012-03-29 75 views
0

THEN語句我有兩個表:IF ...在MySQL觸發

table A 
id | level_ID | col_m | col_n 

table B 
id | prev_ID | cur_ID 

table A從那裏新的插入完成和更新以及應用層的操作。

DELIMITER | 
DROP TRIGGER IF EXISTS trigger_happy| 
CREATE TRIGGER trigger_happy AFTER UPDATE ON table A 
FOR EACH ROW 
    BEGIN 
    IF level_ID!=NEW.level_ID THEN 
    INSERT INTO table B (id, cur_ID, prev_ID) 
    VALUES (OLD.id, NEW.level_ID, OLD.level_ID) 
    END IF; 
END; 
DELIMITER ; 

的問題是,我打算有觸發只有火,如果在level_ID列的變化:在另一方面table B只有通過觸發器的table Alevel_ID列有一個更新後插入的值。其他列col_mcol_n上的更新不應激發觸發器。

幫我用我的觸發器語句,因爲它不起作用。

編輯

更新列在應用程序邏輯中的不同時間完成。只有在level_ID上的更新完成後,我才需要觸發器纔會被觸發。

回答

0

我已經找到了爲我工作的解決方案如下:

DELIMITER | 
DROP TRIGGER IF EXISTS trigger_happy| 
CREATE TRIGGER trigger_happy AFTER UPDATE ON table A 
FOR EACH ROW 
    BEGIN 
    IF NEW.level_ID!=OLD.level_ID THEN /* edit conditional statement */ 
    INSERT INTO table B (id, cur_ID, prev_ID) 
    VALUES (OLD.id, NEW.level_ID, OLD.level_ID) 
    END IF; 
END; 
| /* add delimiter */ 
DELIMITER ; 

這觸發只會在更新後列level_ID和火比較變化。當我使用phpmyadmin時,我必須指定|的分隔符。我離開它在默認;

我希望這可以幫助某人。

0

很簡單,您需要運行兩個更新。

一個更新將需要level_ID列上的觸發器。第二個更新將更新col_m和col_n列,而無需關聯的觸發器。

+0

請在你的回答中詳細說明。請參閱編輯。 – gabeno 2012-03-29 20:30:21