2010-05-13 47 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 //