MySQL 구분 기호(DELIMITER)란 무엇인가?
MySQL에서 구분 기호(Delimiter)는 SQL 문장의 끝을 알려주는 문자로, 주로 저장 프로시저(Stored Procedure), 함수(Function), 트리거(Trigger)를 정의할 때 사용됩니다. MySQL의 기본 구분 기호는 세미콜론(;)입니다.
왜 구분 기호를 변경해야 할까?
일반적인 단일 쿼리를 실행할 때는 세미콜론으로 충분하지만, 저장 프로시저처럼 여러 문장을 하나의 블록으로 작성하는 경우에는 문제가 발생합니다. 프로시저 내부에도 세미콜론이 포함되어 있기 때문에, MySQL 클라이언트가 어디서 문장이 끝나는지 잘못 해석할 수 있습니다.
따라서 이런 경우에는 $$ 또는 //와 같은 다른 구분 기호로 임시 변경한 후, 프로시저 정의가 끝나면 다시 세미콜론으로 되돌리는 것이 일반적인 방법입니다.
예제 테이블 소개
다음은 예제로 사용할 테이블 'GetRecordFromNow'의 데이터입니다.
+---------------------+ | YourDateTime | +---------------------+ | 2018-12-07 22:30:18 | | 2018-12-03 22:30:31 | | 2018-12-02 22:30:41 | | 2018-12-01 22:30:56 | | 2018-12-03 22:31:04 | +---------------------+ 5 rows in set (0.00 sec)
구분 기호 사용 데모
delimiter 키워드는 MySQL 클라이언트에서 제공하는 명령어로, 서버가 아닌 클라이언트 측에서 문장의 끝을 판단하는 방식을 바꿔줍니다. 아래 예제는 구분 기호를 활용해 위 테이블의 전체 데이터를 조회하는 저장 프로시저를 생성하는 과정입니다.
mysql> delimiter // mysql> create procedure DisplayALL() -> begin -> select *from GetRecordsFromNow; -> end -> // Query OK, 0 rows affected (0.40 sec) mysql> delimiter ; mysql> call DisplayALL(); +---------------------+ | YourDateTime | +---------------------+ | 2018-12-07 22:30:18 | | 2018-12-03 22:30:31 | | 2018-12-02 22:30:41 | | 2018-12-01 22:30:56 | | 2018-12-03 22:31:04 | +---------------------+ 5 rows in set (0.07 sec) Query OK, 0 rows affected (0.10 sec)
핵심 정리
- 기본 구분 기호는 세미콜론(
;)이다. - 저장 프로시저, 함수, 트리거를 정의할 때는 내부의 세미콜론과 충돌하지 않도록
//또는$$로 변경한다. - 정의가 끝난 후에는 반드시
delimiter ;로 원래대로 되돌려야 한다.