본문 바로가기

프로그래밍/SQL

[SQL] Trigger란 ?

- 트리거: 임의의 테이블에 연관된 데이터베이스 객체로서 테이블에 특정 이벤트 발생 시 활성화된다.

- DML의 데이터 상태 관리 자동화에 사용한다.

- 데이터 작업 제한, 기록, 감사 등을 할 수 있다.

 

- DML 수행 시점으로 분류: BEFORE TRIGGER(전),  AFTER TRIGGER(후)

- 수행 차수로 분류: STATEMENT TRIGGER(한번만 수행), ROW TRIGGER(행 마다 수행)

 

- 문형

CREATE [OR REPLACE] TRIGGER trigger명

timing event1 [OR event2...] OF 컬럼명 ON 테이블명

[FOR EACH ROW]

실행 구문;

 

- DELIMITER: 여러개의 트리거 구문을 사용할 때 SQL 단위 구분자로 사용 

- FOR EACH ROW BEGIN: ROW 별로 구문을 적용시킬 때 사용

 

- 예시

-- 예시 1

CREATE TRIGGER ins_sum BEFORE INSERT ON account

FOR EACH ROW SET @sum = @sum + NEW.amount;

 

-- 예시 2

CREATE TRIGGER ins_transaction BEFORE INSERT ON account

FOR EACH ROW PRECEDES ins_sum

SET

@deposits = @deposits + IF(NEW.amount>0,NEW.amount,0),

@withdrawals = @withdrawals + IF(NEW.amount<0,-NEW.amount,0);

 

-- 예시 3

delimiter //

CREATE TRIGGER upd_check BEFORE UPDATE ON account

FOR EACH ROW

BEGIN

    IF NEW.amount < 0 THEN

        SET NEW.amount = 0;

    ELSEIF NEW.amount > 100 THEN

        SET NEW.amount = 100;

    END IF;

END;//

delimiter ;