2010-05-13 77 views
1

我試圖建立一個MySQL的觸發器,做了以下數據:創建MySQL觸發器來驗證另一個表

  • 當有人將數據插入databaseA.bills,它驗證是否databaseB.bills已經有那一行,如果沒有,那麼它會對databaseB.bills執行一個額外的插入操作。

以下是我有:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills 
FOR EACH ROW 
    BEGIN 
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN 
     INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber) 
    END IF 
    END;// 
DELIMITER ; 

的問題是,我無法通過mysql的控制檯或phpMyAdmin的創建。它在END IF END附近返回語法錯誤,我相信這是一個分隔符問題。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END IF END' at line 6 

我在做什麼錯?

回答

1

如果你有唯一索引,你總是可以做出INSERT忽略

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills 
    FOR EACH ROW 
     BEGIN 
      INSERT IGNORE INTO databaseB.bills (billNumber) VALUES (NEW.billNumber); 
     END // 
+0

嗯,我結束了使用這種較短的查詢,因爲是啊,billNumber是唯一索引。所有其他答案也是正確的。 – 2010-05-13 18:48:23

1

假設你正在使用//作爲您的分隔符,你只需要在觸發的身體內的SQL支桿結束使用分號,並觸發END後使用//:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills 
FOR EACH ROW 
    BEGIN 
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN 
     INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber); 
    END IF; 
    END //