본문 바로가기

전체보기/Database

[MySQL] Delimiter 란?

이번 글에서는 MySQL의 Delimiter 명령어에 대해 다뤄보겠습니다.

 

최근 Procedure를 정의하면서 다음과 같은 SQL문을 사용하였습니다.

mysql> DELIMITER $$ 
mysql> CREATE PROCEDURE insert_test() 
    -> BEGIN 
    -> DECLARE i INT; 
    -> SET i = 0; 
    -> WHILE i < 100000 DO 
    -> INSERT INTO account(createDatetime) VALUES(now()); 
    -> SET i = i + 1; 
    -> END WHILE; 
    -> END $$
mysql> DELIMITER ;

맨 처음과 끝에 Delimiter 명령어를 사용하였습니다.

본 글은 Delimiter에 관한 글이기 때문에

Procedure와 다른 명령어들에 대해서는 다루지 않겠습니다.

 

다시 돌아와서,

그럼 Procedure를 정의할 때 왜 Delimiter를 사용한 걸까요?

 

Delimiter는 직역하면 '구문 문자'로

C나 JAVA의 ';'(세미콜론)라고 생각하시면 됩니다.

즉, 문법의 끝을 나타내는 역할을 합니다.

 

Delimiter 명령어는 이러한 구문 문자를 정의하는 기능을 합니다.

 

Delimiter 명령어를 사용하는 방법은 간단합니다.

다음과 같이 Delimiter 명령어 뒤에

구문 문자로 사용하고자 하는 문자를 넣어주면 됩니다.

mysql> DELIMITER $$
mysql> SELECT * FROM account$$

 

그럼 Procedure를 정의할 때는 왜 Delimiter를 사용했을까요?

다시 SQL문을 가져와보겠습니다.

mysql> DELIMITER $$ 
mysql> CREATE PROCEDURE insert_test() 
    -> BEGIN 
    -> DECLARE i INT; 
    -> SET i = 0; 
    -> WHILE i < 100000 DO 
    -> INSERT INTO account(createDatetime) VALUES(now()); 
    -> SET i = i + 1; 
    -> END WHILE; 
    -> END $$
mysql> DELIMITER ;

SQL문을 보시면 Procedure를 정의할 때

내부에 세미콜론을 사용하는 것을 알 수 있습니다.

 

만약 Delimiter를 설정하지 않으면

문장을 구분하기가 어렵기 때문에

위와 같이 Delimiter를 세미콜론이 아닌 $$로 설정한 것입니다.

 

또한 마지막에 Delimiter 명령어를 다시 사용한 이유는

다시 세미콜론을 이용하여 문장을 구분하기 위해서이며

Procedure 정의에 필수적인 요소는 아닌셈입니다.

반응형