트리거란 특정 테이블에 Insert, Delete, Update가 발생했을때 다른 이벤트를 처리하도록 하기 위해 DB에서 재공
- SP와 비슷하게 작동하지만 직접 실행 시킬수 없고 오직 해당 테이블이나 뷰에 이벤트(insert, update, delete)가 발생할 경우에만 실행된다.
- SP와 달리 paramete, return 값을 사용할수 없다.
1) INSERT
회원 테이블에 회원이 등록되었을때 회원 정보 중에서 user_id와 phoneno을 주소록 테이블에 기록되는 예.
회원테이블 - Member, 주소록테이블 - address
ex) //Member 테이블에 Insert가 발생한 경우 실행되는 Trigger
Create Trigger ut_Member_Ins 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, @honeno, getDate())
==> 입력된 데이터는 inserted 라고 하는 약속된 테이블에 기록된다.
그중에서 필요한 필드 값만 가져와 address 에 기록한다.
즉, 회원이 등록된 경우 회원정보 중에서 아이디와 휴대폰 번호를 주소록이라고 하는 테이블에 입력하기 위한 것.
2) DELETE
회원 테이블의 특정 레코드를 삭제했을 때 백업용 회원 테이블에 해당 레코드를 입력하는 예
회원 테이블 - member, 백업용 회원테이블 - member_backup
ex) //member 테이블에 대해서 Delete가 발생한 경우에 실행되는 trigger
create trigger ut_member_delete on member
for delete
as
insert into member_backup
select * from deleted
==> 삭제된 데이터는 deleted라고 하는 약속된 테이블에 기록된다.
회원 테이블의 모든 데이터를 백업하는 것이므로 특정 필드만을 쿼리하지 않고 전체를 쿼리하여 member_backup 테이블에 기록한다.
3) UPDATE
회원테이블에서 휴대폰 번호를 변경한 경우 이를 주소록 테이블에도 변경.
회원테이블 - member, 주소록테이블 - address
ex) //member 테이블에 update가 발생한 경우 실행되는 trigger
create trigger ut_member_update on member
for update
as
declare @user_id varchar(20)
declate @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
==> phoneno 값이 011-1234-5678 에서 010-1234-5678로 변경됐다면 원래 들이 있던 011-1234-5678은 deleted 테이블에 새로 변경된 010-1234-5678은 inserted 테이블에 놓여지게 된다. 따라서 업데이트 이전의 값과 이후의 값을 deleted와 inserted라고 하는 테이블을 통해서 확인 할 수 있다.
* DML Trigger의 종류
1) AFTER Trigger
- 테이블에 insert, update, delete 등의 작업이 일어났을때 작동한다.
- 해당작업 후에 작동한다.
- 테이블에만 작동하며 뷰에는 작동하지 않는다.
2) INSERTED OF Trigger
- BEFORE 트리거라도 부른다.
- 테이블이나 뷰에 이벤트가 작동되지 전에 작동한다.
- 테이블 뿐 아니라 뷰에도 작동되며, 주로 뷰가 업데이트가 가능하도록 사용한다.
- insert, update, delete 세가지 이벤트로 작동한다.
3)
'Sduty > MS-SQL' 카테고리의 다른 글
같은 IP영역대 서버연결 (0) | 2013.12.27 |
---|---|
SP 조건 걸기 (0) | 2013.11.08 |
테이블 및 임시테이블 존재 여부 확인 (0) | 2013.03.30 |
MSSQL 2008 r2 다운로드 및 설치 (0) | 2012.11.01 |
주석달기(table, column) (0) | 2011.04.28 |