2012年5月19日 星期六

MySQL Trigger(觸發)

MySQL的trigger,可以在某個資料表進行新增INSERT、刪除DELETE、更新UPDATE時(之前或之後),自動執行(觸發)其他動作。

以下舉一個例子。
在test資料庫下,有兩個資料表aa和bb,結構如下圖。

下圖為aa資料表的結構:

下圖為bb資料表的結構:

  1. 建一個名稱為tt_add的trigger,在aa資料表新增一筆資料之後。自動在bb資料表新增一筆相對應的資料,並設定 bb.aa_id=aa.aa_id, bb_data=(aa.aa_data1+aa.aa_data2)
    [方法一]下指令
    use test;
    
    DELIMITER |
    CREATE TRIGGER tt_add AFTER INSERT ON aa
    FOR EACH ROW
    BEGIN
    INSERT INTO test.bb
    SET test.bb.aa_id = NEW.aa_id, test.bb.bb_data=(NEW.aa_data1+NEW.aa_data2);
    END;
    |
    

    [方法二]在phpMyAdmin的設定如下圖

  2. 建一個名稱為tt_del的trigger,在aa資料表刪除一筆資料之後。自動在bb資料表刪除 bb.aa_id=aa.aa_id的資料
    [方法一]下指令
    use test;
    
    DELIMITER |
    CREATE TRIGGER tt_del AFTER DELETE ON aa
    FOR EACH ROW
    BEGIN
    DELETE FROM test.bb
    WHERE test.bb.aa_id = OLD.aa_id;
    END;
    |
    
    [方法二]在phpMyAdmin的設定如下圖
  3. 建一個名稱為tt_upd的trigger,在aa資料表更新一筆資料之後。自動在bb資料表更新 bb.aa_id=aa.aa_id的資料,並設定bb.bb_data=(aa.aa_data1+aa.aa_data2)
    [方法一]下指令
    use test;
    
    DELIMITER |
    CREATE TRIGGER tt_upd AFTER UPDATE ON aa
    FOR EACH ROW
    BEGIN
    UPDATE test.bb
    SET test.bb.bb_data=(NEW.aa_data1+NEW.aa_data2)
    WHERE test.bb.aa_id = NEW.aa_id;
    END;
    |
    

    [方法二]在phpMyAdmin的設定方法如下圖

其他:
  • 在phpMyAdmin新增trigger的設定,為點選觸發器,再按Add trigger
  • 顯示目前設定的trigger:SHOW triggers;

沒有留言:

張貼留言