2016-11-21 67 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;