2016-11-21 36 views
0

我有2个表,让我们将它命名为表A和表B,每次在表中插入一些东西我希望一些数据(ID,名称,评论)自动插入表中B但是只有在表B中没有原始名称相同的情况下。MySQL如果触发条件内

实施例:

如果我插入OBJECT1所述的与值:

id=1, colour=2, name=example, price=5€, comment="blablabla" 

它应在表B中被插入的行与此值:

id=1, name=example, comment="blablabla" 

但如果再我在A中插入OBJECT2的值为:

id=2, colour=5, name=example, price=10€, comment="aaa"; 

表B中什么都不应该发生,因为表B中已经有一行以name = example。

这是我的代码:

CREATE TRIGGER mytrigger 
BEFORE INSERT ON tablea 
    IF NOT EXISTS (SELECT * FROM tableb WHERE tableb.name = NEW.name) 
    THEN 
     INSERT INTO tableb (id, name, comment) 
      VALUES (NEW.id, NEW.name, NEW.comment) 
    END IF 

这是我收到的错误:

你在你的SQL语法错误...

我也尝试过在定义的开始和结尾添加BEGIN和END,还尝试了END而不是END IF,还尝试了BEGIN而不是THEN

有人知道我做错了什么吗?

+5

触发器是**高度特定供应商的** - 所以请您是否使用'mysql','postgresql'添加标签来指定,'SQL服务器','oracle'或'db2' - 或者其他的东西。 –

回答

0

在PL/SQL中,不能将EXISTS()放入IF语句中。

所以,请试试这个:

CREATE OR REPLACE TRIGGER mytrigger 
BEFORE INSERT ON tablea REFERENCING NEW AS NEW 
FOR EACH ROW 
declare cnt integer; 
BEGIN 
    SELECT count(*) into cnt FROM tableb WHERE tableb.name = :NEW.name; 
    IF cnt >0 
    THEN 
     INSERT INTO tableb (id, name, comment) 
      VALUES (:NEW.id, :NEW.name, :NEW.comment) 
    END IF 
END;