![[CS 발표] 데이터베이스 트리거](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccs8SE%2FbtsGhGAIle3%2Fp6xTzAi1MTUqCN2g1f4kM0%2Fimg.png)
1. 개요
데이터베이스 트리거란 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미한다.
조금 더 구체적으로 이야기하면 특정 테이블에 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 등과 같은 DML(데이터 조작어, Data Manipulation Language) 문이 수행되었을 때 DBMS에서 묵시적으로 자동으로 수행되는 저장 프로시저라고 할 수 있다. Java와 같은 객체 지향 언어에서 객체가 생성되거나 소멸될 때 자동으로 호출하는 생성자나 소멸자와 같은 묵시적 수행 함수를 떠올린다면 이해가 수월할지도 모르겠다.
트리거(Trigger)는 방아쇠라는 뜻으로 방아쇠를 당기면 총기 내부에서 알아서 일련의 작업들을 실행하고 총알이 발사된다. 마찬가지로 일련의 쿼리들을 하나의 함수처럼 실행하기 위한 쿼리의 집합인 저장 프로시저는 사용자가 필요할 때 직접 실행시키는게 일반적이지만 데이터베이스 트리거는 사용자가 직접 호출하는 것이 아니라, 데이터베이스에 자동적으로 호출하는 것이 가장 큰 특징이다.
예를 들어 고객이 물건을 구매해 주문(Order) 테이블에 정보가 INSERT되면, 등록된 트리거가 발동해 물품(ITEM) 테이블에 자동으로 UPDATE 쿼리문을 실행시키고, 또 등록된 트리거가 발동해 배송(SHIPMENT) 테이블에 INSERT 쿼리문을 실행시키게끔 할 수 있다.
2. 트리거의 종류
트리거에는 테이블 안에 영향을 받은 행 각각에 대해 실행되는 행 트리거와 삽입, 갱신, 삭제되는 행 수에 관계없이 각 트랜잭션 작업에 대해 한번만 실행되는 문장 트리거가 있다.
먼저 행 트리거는
예전 데이터를 읽을 수 있는 OLD,
즉 DELETE로 삭제된 데이터나 UPDATE로 바뀌기 전의 데이터를 읽을 수 있는 가상 줄 변수와
새 데이터를 읽을 수 있는 NEW,
INSERT로 삽입된 데이터나 UPDATE로 바뀐 후의 데이터를 읽을 수 있는 가상 줄 변수에 대해서 실행된다.
반면 문장 트리거는
쿼리 이벤트가 작동한 이후인 AFTER
쿼리 이벤트가 작동하기 전인 BEFORE과 같이 트리거가 실행되는 시기를 지정할 수 있다.
3. 트리거 사용 예시
DELIMITER $$
CREATE TRIGGER update_item
AFTER UPDATE -- {BEFORE | AFTER} {INSERT | UPDATE| DELETE } 중 언제 어떤 작업을 할지 정한다
ON sale_table -- 트리거를 부착할 테이블
FOR EACH ROW -- 아래 나올 조건에 해당하는 모든 row에 적용한다는 뜻
BEGIN
-- 트리거시 실행되는 코드
IF NEW.discount_rate != OLD.discount_rate THEN -- update 트리거는 old와 new 값이 존재한다.
UPDATE item_table SET discount_rate = NEW.discount_rate WHERE discount_rate = OLD.discount_rate;
END IF;
END $$
DELIMITER ;
BEGIN과 END 사이에 조건문과 실행문을 작성할 수 잇다.
sale_table 테이블의 변경 전/후를 기준으로 필드 앞에 변경 전은 OLD, 변경 후는 NEW 키워드가 붙는다.
즉, IF NEW.discount_rate != OLD.discount_rate THEN의 의미는 sale_table의 AFTER UPDATE 후 discount_rate 필드의 값과 변경 전 discount_rate 필드의 값이 불일치한다는 조건을 의미한다.
이 조건을 만족하는 row는 IF문 아래 작성된 UPDATE 쿼리문을 실행하게 된다.
# 참고문헌
https://limkydev.tistory.com/154
[SQLD] 제2장 트리거(Trigger)란?
1. 트리거(Trigger)란? 트리거(Trigger)란 영어로 방아쇠라는 뜻인데, 방아쇠를 당기면 그로 인해 총기 내부에서 알아서 일련의 작업을 실행하고 총알이 날아갑니다. 이처럼 데이터베이스에서도 트리
limkydev.tistory.com
트리거(TRIGGER) 이해하기
트리거 (TRIGGER) 란? 간단히 말해 INSERT,UPDATE, DELETE 문이 Table 에 대하여 수행 되어질 때 묵시적으로 수행되는 Procedure 이다. 트리거는 table 에 저장되는 것이 아니라 별도로 오라클 데이터베이스 자
searchstory.tistory.com
https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%ED%8A%B8%EB%A6%AC%EA%B1%B0
[MYSQL] 📚 트리거(Trigger) 개념 & 사용법
Trigger (트리거) 트리거(Trigger)는 사전적 의미로 '방아쇠'라는 뜻이다. MySQL에서 트리거는 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행되는 것을 말한다. 즉, 어떤 테이블에서 특정한 이
inpa.tistory.com
'<computer_science> > 면접 대비 Coding Interview' 카테고리의 다른 글
7월 면접 준비 (0) | 2024.07.12 |
---|---|
[CS 발표] 인증과 인가 (0) | 2024.04.18 |
[CS 발표] List, ArrayList, LinkedList (0) | 2024.04.04 |
[CS 발표] 메모리 Memory (0) | 2024.03.28 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!