Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 트리거 생성 시 구분 기호(DELIMITER)를 변경해야 하는 이유

MySQL에서는 각 SQL 문장의 끝을 나타내기 위해 기본적으로 세미콜론(;)을 구분 기호(delimiter)로 사용합니다. 그런데 트리거(trigger)를 생성할 때는 이 구분 기호를 반드시 변경해 주어야 합니다.

구분 기호를 변경해야 하는 이유

트리거 본문 안에는 여러 개의 SQL 문장을 포함할 수 있습니다. 만약 구분 기호를 그대로 두면, MySQL은 트리거 본문 내부에 등장하는 첫 번째 세미콜론을 트리거 정의의 끝으로 잘못 해석하여 구문 오류를 발생시킵니다.

따라서 구분 기호를 임시로 다른 기호로 바꾸면, MySQL에게 "세미콜론이 나타나더라도 아직 트리거 정의가 끝난 것이 아니다"라고 알려줄 수 있습니다.

DELIMITER 명령으로 구분 기호 변경하기

다음과 같이 DELIMITER // 명령문을 사용하면 구분 기호를 세미콜론(;)에서 더블 슬래시(//)로 일시적으로 변경할 수 있습니다.

mysql> DELIMITER //

변경 후에는 MySQL이 더블 슬래시(//)를 만났을 때에만 해당 문장이 종료된 것으로 인식합니다. 즉, 트리거 본문 안의 세미콜론들은 개별 문장의 끝으로 처리되지 않고 하나의 트리거 정의 안에 온전히 유지됩니다.

모든 작업이 끝난 뒤에는 구분 기호를 다시 원래대로 세미콜론(;)으로 되돌리는 것이 좋습니다.

mysql> DELIMITER ;

주의 사항

DELIMITER 키워드와 새 구분 기호로 지정할 기호 사이에는 반드시 공백이 한 칸 있어야 합니다. 예를 들어 DELIMITER//처럼 붙여 쓰면 MySQL이 명령을 올바르게 인식하지 못하므로, 항상 DELIMITER // 형태로 입력해야 합니다.