Trigger
Trigger(트리거)는 DML 문장 수행 전이나 수행 후에 자동으로 수행되어야 하는 내용을 작성할 수 있는 개체입니다.
보통 수행 전에 자동으로 수행되어야 하는 내용은 유효성 검사인데, 트리거를 사용하여 유효성 검사를 통과한 경우에만 작업이 수행되도록 할 수 있습니다.
수행 후에 하는 내용은 하나의 테이블에 테이터가 삽입되거나 삭제, 수정 될 때 연쇄적으로 삽입, 삭제, 수정 되어야 하는 다른 데이터가 있을 경우에 사용됩니다.
예를 들어 sqlite3같은 데이터베이스의 경우, 외래키 설정은 가능하지만 외래키 옵션이 제대로 작동되지 않아서 삭제 이상이 생기는 경우가 있는데 이 경우에 트리거를 사용하여 해결할 수 있습니다.
Trigger 생성법
1. 공식
statement에서 참조 값을 지정할 때 :NEW.참조값 그리고 :OLD.참조값을 사용하게 되는데
일단 :NEW는 delete에서 사용하지 않고 :OLD는 insert에서 사용하지 않습니다.
update에서는 :NEW와 :OLD가 모두 사용이 되는데, 이 경우 :NEW는 DML에 의해서 변경된 값을 불러오고 :OLD는 DML에 의해서 변경되기 전의 값을 불러옵니다. 만약 변경된 것이 없다면 이 명령어를 쓸 필요가 없습니다.
http://hotquery.tistory.com/entry/
이 블로그가 :NEW와 :OLD에 대해 정리를 잘 해두어 참고하였습니다.
Trigger 삭제
트리거를 삭제하려면 아래와 같이 명령하면 됩니다.
Trigger 실습
1. 회원 테이블에서 데이터를 추가하면 게시판 테이블에 데이터 1개를 자동으로 추가하는 트리거를 만들어서 사용하기
회원 테이블
id : 문자 30자, 기본키
pw : 문자 20자, 필수
name : 문자와 한글 10자까지, 필수
nickname : 문자와 한글 10자까지, 유일
address : 문자와 한글 100자까지
게시판 테이블
boardnum : 글번호 : 정수 10자리, 기본키, 시퀀스 사용
boardtitle : 글제목 : 한글 100자까지, 기본값은 무제
boardcontents : 글내용 : 한글 2000자까지, 기본값 내용없음
boarddate : 작성일 : 날짜, 기본값 sysdate
nickname : 회원 테이블의 nickname을 참조하는 외래키로 회원 테이블에서 삭제될 때 null 값을 가지도록 설정
create table member(
id varchar2(30) primary key,
pw varchar2(20) not null,
name varchar2(30) not null,
nickname varchar2(30) unique,
address varchar2(300));
--시퀀스 중복 제거
drop sequence sqnum;
--시퀀스 생성
create sequence sqnum
start with 1;
--board 테이블 생성
'JAVA 공책 > => 다시 정리' 카테고리의 다른 글
Parameter (0) | 2018.08.24 |
---|---|
Exception Handling(예외처리) (0) | 2018.08.23 |
인터페이스 (0) | 2018.08.22 |
Oracle의 프로그래밍 PL/SQL & Procedure (0) | 2018.07.31 |
Database에서의 Inline view & Rownum & Sequence & Index & Synonym (0) | 2018.07.31 |