트리거(Trigger)란?
- 테이블에 이벤트(event)가 발생하면 자동으로 실행되는 작업
- 적용 단위
- 행 트리거: 테이블 내에 변경되는 행에 대해 각각 실행됨
- 문장 트리거: INSERT, UPDATE, DELETE 문장 전체에 대해 실행
- 트리거의 구성요소
- 이벤트: 테이블에 INSERT, UPDATE, DELETE가 사용되는 경우
- 조건(condition): optional, 조건이 만족하는 경우에만 트리거를 수행
- 동작(action): 트리거가 수행해야할 작업
- 트리거의 용도: 데이터베이스 작업을 제한하거나, 작업의 기록(log), 작업에 대한 감사(audit)를 수행하기 위해 사용
트리거의 정의
CREATE [OR REPLACE] TRIGGER trigger_name
<BEFORE | AFTER> <INSERT | UPDATE | DELETE> ON table_name
<FOR EACH ROW | FOR EACH STATEMENT>
[WHEN condition]
BEGIN
...
END;
트리거의 삭제 및 카탈로그 정보
- 트리거의 삭제
DROP TRIGGER trigger_name;
- 트리거 카탈로그 확인
- ALL_TRIGGERS: 데이터베이스 내의 모든 트리거
- USER_TRIGGER: 현재 사용자의 트리거들
트리거의 예
CREATE OR REPLACE TRIGGER tg_refresh_dept_size
AFTER
INSERT OR DELETE OR UPDATE OF dept ON student
BEGIN
refresh_dept_size; -- 저장프로시저 호출. execute 키워드 불필요
END;
/
update student set dept='전기' where sno=100;
insert into student values (600, '홍길동', 3, 'IT');
delete student where sno=400;
테이블 student의 컬럼 dept가 변경될 때 마다 프로시저 refresh_dept_size가 호출되는 트리거를 생성해서
변경된 데이터가 유도된 뷰에 자동으로 업데이트 된다.
select * from student;
create or replace trigger tg_refresh_dept_size
after
insert or delete or update of dept on student
begin
refresh_dept_size; -- 정의 내용 그대로 써줘도 됨
end;
/ -- 여기까지의 내용을 compile하라는 의미
select * from user_triggers;
select * from student;
select * from dept_size;
update student set dept='전기' where sno=100;
insert into student values (600, '홍길동', 3, 'IT');
delete student where sno=400;
'데이터베이스 Database' 카테고리의 다른 글
Chapter 7 데이터 종속성과 정규화 ✍ (0) | 2020.11.16 |
---|---|
Chapter 6 SQL - JDBC를 이용한 자바응용프로그램 개발 (0) | 2020.11.05 |
Chapter 6 SQL - 함수 Function (0) | 2020.10.26 |
Chapter 6 SQL - 저장프로시저 Stored Procedure (0) | 2020.10.26 |
Chapter 6 SQL - View (0) | 2020.10.21 |