2012-11-08 3 views
1

간단한 MySQL 삽입 트리거를 작성하여 테이블에 중복이 있는지 확인하려고합니다. 하지만 (*)으로 줄에 구문 오류가 있습니다. 뭐가 문제 야 ? 예를 들어MySQL 삽입 트리거 구문 오류가 발생하기 전에?

 delimiter ; 

(*) CREATE TRIGGER `BookLanguages_BeforeInsertTrigger` 
     BEFORE INSERT ON `BookLanguages` 
     FOR EACH ROW 
     BEGIN 
      IF (exists(select * from Languages bl where bl.BookID = new.BookID and bl.LanguageID = new.LanguageID)) THEN 
       SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'An error occurred'; 
      END IF; 
(*) END; 

I 커뮤니티 서버 v5.5.21

답변

3

를 사용하여 다른 구분 기호를 사용하고 있습니다 :

DELIMITER // 

... 다음 END // 라인에 //을 사용합니다.

두 번째 마지막 행의 세미콜론이 그 시점까지 모든 것을 서버로 되돌려 보내므로 서버가 최종 END;을 보지 못하고 마지막 행을 보지 않고 트리거를 작성하기 때문입니다. 그것은 구문 오류입니다.

이 컨텍스트에서 DELIMITER 명령의 목적은 트리거 (서버의 경우)와 트리거의 끝 (클라이언트가 서버로 보낼 때)의 각 문 끝을 구별하는 것입니다. 그것들이 다르긴하지만 고객이 진술을 종료했다고 생각하지 않으면 트리거의 본체에 세미콜론을 사용할 수 있습니다.

+0

네가 맞아. 고마워. 이제 작동 중입니다. – Tony

관련 문제