Trigger란?
- 방아쇠(trigger)
특정한 안정 상태를 갖기 위해 사용되는 전자 회로(electronic circuit) 또는 기계나 프로그램을 자동으로 작동 개시시키는 것을 말한다. 전자는 컴퓨터에서는 CPU와 그 주변 장치에 사용되고 있는 논리 회로(logical circuit)의 스위칭에 관련하여 사용되고 있다. 또 오실로스코프(oscilloscope) 등에서는 비주기적으로 발생하는 동일 파형을 관측하기 위한 장치를 가리킨다.
이것은 측정하고자 하는 신호(signal), 또는 그 신호와 시간적으로 관계있는 신호의 일부에서 트리거 신호라고 하는 펄스(pulse)형의 파형을 만들어내고, 이 신호에서 음극선관(cathode ray tube)의 시간 축 방향의 톱니형 파형을 출발시키는 방법.
이 방법은 어떤 종류의 파형이라도 주파수에 관계없이 파형상 같은 위치에서 관측할 수 있기 때문에 매우 일반적이며, 특히 펄스 파형의 관측에는 유효하다. 후자는 예를 들면, 메모리 내에 적재한 프로그램을 수동 동작 같은 외부 환경으로부터의 개입에 의해 자동으로 실행(run)시키는 것을 말한다.
- 특징
▪ 자료의 무결성을 유지
▪ 변경된 자료 및 변경한 유저를 기록해서 테이블의 변경정보 감시
▪ 지정한 이벤트가(DML)가 발생할 때마다 자동으로 실행되는 PL/PQL 블럭 → 자동 호출(호출문 없음)
▪ 데이터 흐름 제어문(TCL)은 사용할 수 없다!(MS-SQL에서는 가능)
▪ 트랜잭션 제어 문(COMMIT, ROLLBACK, SAVEPOINT)장을 사용하지 못한다.
▪ 주요부에 의해 호출되는 프로시저나 함수는 트랜잭션 제어 문장을 사용하지 못한다.
▪ 주요부는 LONG또는 LONG RAW변수를 선언할 수 없다.
▪ 주요부가 액세스하게 될 테이블에 대한 제한이 있다.
- 트리거 형식
CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name [REFERENCING OLD AS old / NEW AS new] [FOR EACH ROW] [WHEN (condition)] [trigger_body] [CALL procdeure_name] / |
timing | 트리거 이벤트에 따라 트리거를 실행하는 시기 (Before, After) |
event | 트리거를 실행하는 데이터 조작어 (Insert, Update, Delete) |
table/view_name | 트리거와 관련된 테이블을 나타냄 |
REFERENCING | 현재 행의 기존 및 새로운 값에 대한 상관 이름을 지정한다. |
FOR EACH ROW | 트리거를 행 트리거로 지정 |
WHEN | 트리거 제한 사항을 지정 (body의 실행 여부를 결정) |
trigger body | 트리거에 의해 수행되는 작업 또는 body |
CALL | body 대신 내장 프로시저를 호출 할 수 있다. |
- 트리거의 장점
1) 복잡한 처리를 쉽게 구현한다.
복잡한 date integrity를 구현하기 위해 사용할 수 있는 방법 중 가장 강력한 기능을 제공한다. 특히 rule이나 check constraints로서 구현하기 힘든 복잡한 처리도 트리거는 직접 작성하여 쉽게 구현해준다. date integrity란 쉽게 말해 데이터베이스에 잘못된 데이터가 들어오는 것을 막는 방법이다.
2) 역정규화된 데이터관리를 해준다.
원래 모든 데이터는 기본적인 데이터 모델링과 정규화 단계를 거치게 되면 각각의 테이블로 잘 분산되어 테이블 간에 서로 중복된 데이터가 없게 된다. 그러나 때론 처리속도를 높이고 개발을 좀 더 쉽게 하기 위해서 역정규화과정을 수행하기도 하고 그 결과 테이블 간에 논리적으로 같은 의미를 지니는 데이터를 중복해서 저장하기도 한다. 이렇게 데이터가 수정될 때 항상 일관성을 갖도록 해주기 위해 트리거를 사용하면 편리하다.
3) 복잡한 업무를 단순화한다.
커뮤니티 Q&A
위 이론과 관련된 게시글이에요.
이해가 안 되거나 궁금한 점이 있다면 커뮤니티에 질문해 보세요!
게시글 작성하기