2016-08-07 4 views
0

MyISAMエンジンで外部キーチェックを実施するためのトリガを作成することに問題がありました。助言がありますか?以下のエラーを見つけてください。mysqlはトリガーエラーを作成します

SQLSTATE [42000]:構文エラーまたはアクセス違反:1064あなたは、あなたのSQL構文でエラーが発生しています。近くに使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルをチェック 'ERROR 1644(45000):カスタムForeignKeyError ELSEIF(COをSELECT' 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;) 

答えて

1

最後を削除しますあなたの一部は、文を生成するエラー。ただ、その文の終わりに;を忘れてはいけない

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

を使用しています。

をツール上であなたによります別の区切り文字も定義する必要があるトリガーを定義するために使用します。

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

ありがとうございました。もう解析エラーを受け取ることはありません。 –

関連する問題