트리거란 특정 테이블에 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라고 하는 테이블을 통해서 확인할 수 있다.



+ Recent posts