2016-09-25 51 views
0

有一個表,這個模式觸發器以防止在條件缺失的MySQL

表演(PerformerID,PerformerName,街道,城市,省,郵編,ActivityID)

我需要定義一個觸發器如果刪除的ActivityID對於表是唯一的,則防止刪除。換句話說,如果某人嘗試刪除一個Performer,當他/她是唯一一個具有某個ActivityID的整個表時,觸發器應該觸發並避免刪除。否則觸發不應該中斷。

我試過下面的代碼,但它給我一個語法錯誤。

CREATE TRIGGER deletePerformer BEFORE DELETE ON Performers 
FOR EACH ROW 
BEGIN 
If (Performers.ActivityID FROM INSERTED != Performers.ActivityID FROM Peformers) 
Begin 
RAISERROR ('Deletion is Not Allowed!', 16, 1) 
Return 
End 
END; 

任何幫助是非常讚賞。

回答

1

正確的語法會是這個樣子:

DELIMITER $$ 

CREATE TRIGGER deletePerformer BEFORE DELETE ON Performers 
FOR EACH ROW 
BEGIN 
    If (NOT EXISTS (SELECT 1 
        FROM Performers p2 
        WHERE p2.ActivityID = old.ActivityId AND 
          p2.PerformerID <> old.PerformerId 
        ) 
     ) THEN 
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Deletion is Not Allowed!'; 
    End if; 
END 

$$ 

DELIMITER ; 

我沒有,但是,相信這是強制要執行規則的最佳方法。

+0

感謝您的回答。 'Return'和'End if'之後的那些分號不應該在那裏嗎?我刪除了它們並嘗試了你的代碼,但它仍然給我第11行上的錯誤.. – Arcane

+0

錯誤1064(42000):你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'('Deletion is Not Allowed',16,1)附近使用正確的語法「 返回 End if END'at line 11 – Arcane

+0

@Arcane。 。 。這是有道理的,因爲'RAISEERROR'是SQL Server使用的。 MySQL使用'SIGNAL'。 –