Posted
Filed under 분류없음

[참조] - http://opensourceforge.tistory.com/148


트리거란 특정 테이블에 INSERT, DELETE, UPDATE가 발생했을 때 다른 이벤트를 처리하도록 하기 위해서 데이터베이스에서 제공하는 기술이다.

다음은 Insert, Delete, Update에 대한 간략한 예제이다.

1) INSERT
회원 테이블에 회원이 등록되었을 때 회원 정보 중에서  user_id와 phoneno을 주소록 테이블에 기록되는 예이다.
회원 테이블은 Member / 주소록 테이블은  address 라고 가정한다.

// Member라고 하는 테이블에 대해서
// 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 이라고 가정한다.

// Member라고 하는 테이블에 대해서
// 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 라고 가정한다.

// Member라고 하는 테이블에 대해서
// 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라고 하는 테이블을 통해서 확인할 수 있다.

2011/01/17 09:32 2011/01/17 09:32