2016-08-07 9 views
0

Probleme beim Erstellen eines Triggers zum Erzwingen der Fremdschlüsselüberprüfung auf der MyISAM-Engine. Irgendwelche Vorschläge? Bitte finden Sie den Fehler unten.mysql create trigger error

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in der Bedienungsanleitung zu Ihrem MySQL-Server-Version für den richtigen Syntax entspricht in der Nähe verwenden 'ERROR 1644 (45000): Benutzerdefinierte ForeignKeyError ELSEIF (SELECT CO' in Zeile 8 (SQL:

CREATE TRIGGER insert_user_permission     
BEFORE INSERT ON user_permissions 
      FOR EACH ROW 
      BEGIN 
       IF (SELECT COUNT(*) FROM users WHERE users.id=new.user_id)= 0 THEN       
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Custom ForeignKeyError' 
        ERROR 1644 (45000): Custom ForeignKeyError 
       ELSEIF (SELECT COUNT(*) FROM permissions WHERE permissions.id=new.permission_id)= 0 THEN 
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Custom ForeignKeyError' 
        ERROR 1644 (45000): Custom ForeignKeyError 
       END IF; 
      END;) 

Antwort

1

Entfernen Sie die letzte ein Teil von Ihnen error-Anweisung zu erzeugen. verwenden Sie einfach

SIGNAL SQLSTATE '45000' 
SET MESSAGE_TEXT = 'Custom ForeignKeyError'; 

Sie die ; am Ende dieser Aussage nicht vergessen.

Je nach Werkzeug, das Sie Verwenden Sie den Trigger, um ein weiteres Trennzeichen zu definieren.

delimiter | 

CREATE TRIGGER insert_user_permission     
BEFORE INSERT ON user_permissions 
FOR EACH ROW 
BEGIN 
    IF (SELECT COUNT(*) FROM users WHERE users.id=new.user_id)= 0 THEN       
     SIGNAL SQLSTATE '45000' 
     SET MESSAGE_TEXT = 'Custom ForeignKeyError'; 
    ELSEIF (SELECT COUNT(*) FROM permissions WHERE permissions.id=new.permission_id)= 0 THEN 
     SIGNAL SQLSTATE '45000' 
     SET MESSAGE_TEXT = 'Custom ForeignKeyError'; 
    END IF; 
END 
| 
delimiter ; 
+0

Danke, es hat funktioniert. Der Parse-Fehler wird nicht mehr angezeigt. –