Delimiter란?

텍스트 또는 스트림에서 독립적 영역의 경계를 구분짓는 문자이다.

C나 Java의 세미콜론(';')이 이에 포함된다.

직역하면 '구분 문자' 라고 해석된다.

 

MySQL에서의 Delimiter?

SQL문의 프로시저에서 사용되는 세미콜론을 문장의 끝으로 해석하지 않도록 하는 방지책.

 

두 수를 더하는 프로시저가 있다고 가정.

문장의 끝에 세미콜론을 적어야 하는 프로시저 특징 때문에 SQL이 종료됐다고 착각.

CREATE PROCEDURE add(IN a int, IN b int, OUT result int)
BEGIN -- 프로시저 시작
	SET result = a + b;
END -- 프로시저 끝

 

이를 해결하기 위해 SQL 종료 문자를 세미콜론이 아닌 $$로 치환

 

delimiter $$ -- 구분자를 '$$'로 치환

CREATE PROCEDURE add(IN a int, IN b int, OUT result int)
BEGIN -- 프로시저 시작
	SET result = a + b;
END -- 프로시저 끝
$$ -- SQL 종료

delimiter ; -- 구분자를 다시 세미콜론으로 치환

 

'DB' 카테고리의 다른 글

[DB] 트리거(Trigger)  (0) 2024.05.27

트리거란?

데이터베이스에서 특정 이벤트가 일어날 때 자동으로 실행되는 프로시저.

트리거를 통해 데이터 작업 제한, 기록, 감사 등을 할 수 있다.

 

예시)

주문 테이블에 데이터가 추가되었을 때 주문이력 테이블에 관련된 정보가 자동으로 저장된다.

 

트리거의 장단점

장점

데이터의 무결성과 일관성 유지에 도움을 준다.

업무 자동화를 통해 작업 효율이 향상된다.

단점

표면적으로 드러나있지 않아 유지보수가 어렵다.

 

실습

(MySQL 8.0)

1. 테스트용 테이블을 생성한다.

-- 주문
CREATE TABLE `order` (
    id BIGINT PRIMARY KEY,
    order_product varchar(100),
    order_user varchar(100),
    order_date TIMESTAMP
);

-- 주문이력
CREATE TABLE `order_history` (
    id BIGINT PRIMARY KEY,
    order_id varchar(100),
    order_date TIMESTAMP
);

 

2. ORDER 테이블에 트리거를 설정한다.

 

3. ORDER  테이블에 값을 넣어 확인한다.

'DB' 카테고리의 다른 글

[MySQL] Delimiter(구분 문자)란?  (0) 2024.05.27

+ Recent posts