트리거란 특정 테이블에 INSERT, DELETE, UPDATE가 발생했을 때 다른 이벤트를 처리하도록 하기 위해서 데이터베이스에서 제공하는 기술이다.
다음은 Insert, Delete, Update에 대한 간략한 예제이다.
1) INSERT
회원 테이블에 회원이 등록되었을 때 회원 정보 중에서 user_id와 phoneno을 주소록 테이블에 기록되는 예이다.
회원 테이블은 Member / 주소록 테이블은 address 라고 가정한다.
// Insert 가 발생한 경우에 실행되는 트리거
Create Trigger ut_Member_Insert on Member
for Insert
AS
declare @user_id varchar(20)
declare @phoneno varchar(20)
Select @user_id = user_id, @phoneno = phoneno From inserted
insert into address values(@user_id, @phoneno, getDate())
상기 예에서 처럼 입력된 데이터는 Inserted 라고 하는 약속된 테이블(?)에 기록된다.
따라서 그 중에서 필요한 필드 값만 가져온 후 address 테이블에 기록한다.
즉 상기 코드는 회원이 등록된 경우 회원 정보 중에서 아이디와 휴대폰 번호를 주소록이라고 하는 테이블에 입력하기 위한 것이다.
2) DELETE
이번에는 회원 테이블의 특정 레코드를 삭제했을 때 백업용 회원 테이블에 해당 레코드를 입력하는 예이다.
회원 테이블은 Member / 백업용 회원 테이블은 Member_bakcup 이라고 가정한다.
// Delete가 발생한 경우에 실행되는 트리거
Create Trigger ut_Member_Delete on Member
for Delete
AS
Insert into member_backup
select * from deleted
상기 예에서 처럼 삭제된 데이터는 Deleted라고 하는 약속된 테이블에 기록된다.
여기에서는 회원 테이블의 모든 데이터를 백업하는 것이므로 특정 필드만을 쿼리하지 않고
전체를 쿼리하여 member_backup 테이블에 기록하도록 하였다.
3) UPDATE
이번에는 회원 테이블에서 휴대폰 번호를 변경한 경우 이를 주소록이라고 하는 테이블에도 변경한다고 가정하자..
회원 테이블은 Member / 주소록 테이블은 Address
휴대폰번호에 해당되는 필드는 phoneno 라고 가정한다.
// Update가 발생한 경우에 실행되는 트리거
Create Trigger ut_Member_Update on Member
for Update
AS
declare @user_id varchar(20)
declare @phoneno varchar(20)
if update(phoneno) begin
select @phoneno = phoneno, @userid = user_id from inserted
update address set phoneno = @phoneno
where user_id = @user_id
end
Update의 경우 Updated 라고 하는 테이블을 사용하는 것이 아니라 Inserted와 Deleted 2개의 테이블을 사용한다.
즉 phoneno 필드 값이 011-1234-5678에서 010-1234-5678로 변경되었다면
원래 들어 있던 011-1234-5678은 Deleted 테이블에 새로 변경된 010-1234-5678은 Inserted 테이블에 놓여지게 된다.
따라서 업데이트 이전의 값과 이후의 값을 Deleted와 Inserted라고 하는 테이블을 통해서 확인할 수 있다.
'MSSQL' 카테고리의 다른 글
[MSSQL] INDEX 인덱스 정리 (0) | 2016.07.16 |
---|---|
[MSSQL] ERROR 15023 에러 (0) | 2016.07.16 |
[MSSQL] @@ROWCOUNT 최근 실행된 문의 영향을 받은 행 수 반환 (0) | 2016.07.16 |
[MSSQL] @@ERROR 사용 (0) | 2016.07.16 |
[MSSQL] 프로시저 실행 결과를 txt 파일로 저장하기 (0) | 2016.07.16 |