이번 글에서는 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 정의에 필수적인 요소는 아닌셈입니다.
반응형
'전체보기 > Database' 카테고리의 다른 글
[MSSQL] DECIMAL 사칙연산 파헤치기 (0) | 2020.10.15 |
---|---|
[MSSQL] Collation 충돌 해결하기 (0) | 2020.06.13 |
[MSSQL] Collation 파헤치기 (1) | 2020.06.12 |
[Database]Isolation level 파헤치기 - 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까? (0) | 2020.03.01 |
[Database]Transaction과 isolation level (0) | 2019.06.23 |