Linux/SQL

[DBMS] 트리거 (Trigger)

GGkeeper 2021. 12. 8. 22:04

• 트리거(Trigger)

테이블에 대한 특정 이벤트에 반응해 자동으로 실행되는 작업

이벤트 : INSERT, UPDATE, DELETE

트리거 실행 시점을 이벤트 전(BEFORE)이나 이벤트 후(AFTER)로 지정하여 설정 = 활성화 시간

INSERT 전/후, UPDATE 전/후, DELETE 전/후

MySQL은 5.0.2버전부터 표준 트리거가 지원됨

데이터 상태의 관리를 자동화하는 데 사용

데이터 작업 제한, 작업 기록, 변경 작업 감사 등

 

• 제약사항

하나의 스키마에서 트리거의 이름은 중복 될 수 없음

하나의 테이블에는 동일한 활성화 시간 및 이벤트를 갖는 두 개의 트리거를 가질 수 없음

ex) INSERT 이벤트 전(BEFORE) 트리거 두 개 생성 불가능

 

• 트리거 종류

행 트리거

테이블 안의 영향을 받은 레코드(rows) 각각에 대해 실행

변경 전 또는 변경 후의 레코드(rows)는 OLD, NEW라는 가상 줄 변수를 이용해 사용 가능

 

문장 트리거

INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다.


• OLD / NEW 키워드

트리거에 대한 MySQL의 확장 기능

트리거 본문 내에서 OLD.컬럼명 및 NEW.컬럼명 을 사용하면 트리거의 영향을 받는 행의 열에 액세스 가능

OLD : 이벤트가 일어나기 이전 데이터

NEW : 이벤트가 일어난 이후 데이터

대소문자를 구분하지 않음

이벤트에 따라 사용할 수 있는 키워드가 정해져 있음

 

INSERT : NEW

UPDATE : OLD , NEW

DELETE : OLD 


• 트리거 생성

mysql> DELIMITER // 
mysql> CREATE TRIGGER <트리거 이름> <활성화시간> <이벤트> ON <테이블명> 
           FOR EACH ROW 
           BEGIN
                   실행문 ;
                    ....
           END //
mysql> DELIMITER ;

- 활성화 시간

트리거 실행 시점

BEFORE : 이벤트 발생 전에 실행

AFTER : 이벤트 발생 후에 실행


- 이벤트

트리거가 실행 될 이벤트 ( INSERT / UPDATE / DELETE )

 

- FOR EACH ROW

이벤트가 발생하면 레코드(rows) 당 한번씩 실행문 수행 = 행트리거


• 트리거 확인

mysql> SHOW TRIGGERS ;


• 트리거 삭제

mysql> DROP TRIGGER <트리거 이름>;

'Linux > SQL' 카테고리의 다른 글

[DBMS] 저장 함수 실습  (0) 2021.12.08
[DBMS] 저장 프로시저 실습  (0) 2021.12.08
[DBMS] 저장 함수 (Stored Function)  (0) 2021.12.08
[DBMS] 저장 프로시저 (Stored Procedure)  (0) 2021.12.08
[DBMS] 변수 실습  (0) 2021.12.08