- 저장 프로시져와 같이 일련의 작업을 수행하는 프로그램 개체이기는 하지만 사용자가 임의로 호출해서 사용할 수 없다.
- 테이블 개체에 추가, 삭제, 변경등이 발생하거나 데이터 베이스의 구조의 변경이 발생될 때 자동으로 동작한다.
- 일종의 이벤트 핸들러라고 볼 수 있다.
- 일반적으로 데이터베이스 모델링에 따른 무결성을 구현하거나 상당히 일반화 되어 있는 저 수준 비즈니스로직을 적용하는데
사용된다.
- 트리거는 테이블에 종속적이어서 해당 테이블에서만 사용이 가능하다.
- 실제로 SSMS에서 보면 테이블안에 트리거가 있는 것을 확인할 수 있을 것이다.
- 트리거에는 AFTER TRIGGER와 INSTEAD OF TRIGGER의 두가지 종류가 있다.
- 모든 트리거는 데이터베이스 무결성이 가장 상위로 무결성에 위배될 경우 트리거는 실행되지 않는다.
(무결성에 위배가 되면 해당 INSERT, DELETE, UPDATE문이 실행되지 않기 때문에 당연히 트리거는 실행되지 않는다.)
1. AFTER TRIGGER
- INSERT, DELETE, UPDATE 명령이 성공적으로 수행된 다음에 작동하는트리거이다.
- 또한 하나의 테이블안에 여러개의 INSERT TRIGGER를 넣을수는 있지만 실제로 실행되는 것은 어떤것이 먼저 실행될지 예측이 불가능하기 때문에 일반적으로 프로그램처럼 트리거를 순서대로 넣었다고 해서 순서대로 실행될 것이라는 생각은 버려야 한다.
CREATE TRIGGER 트리거명 ON 테이블명
AFTER INSERT(또는 FOR INSERT)
AS
BEGIN
.............
END
2. INSTEAD OF TRIGGER
- INSTEAD OF(~ 대신에) 라는 사전적인 의미처럼 실제로 INSERT, UPDATE, DELETE 명령을 받을경우 그 명령 대신에 실행되는 트리거라고 볼 수 있을 것이다.
- SQL SERVER 2005부터 지원됨
- AFTER TRIGGER 와는 다르게 INSERT, UPDATE, DELETE 명령이 수행되기 전에 실행되는 트리거이다.
- 해당 테이블의 각 INSERT, DELETE, UPDATE 이벤트에 대하여 단 하나의 트리거만 만들 수 있다.
- 만약에 INSTEAD OF TRIGGER 문을 만들고 그 안에 아무런 명령도 하지 않았다면 그 테이블에 요청되는 모든 INSERT명령은 무시된다고 보면 될 것이다.
CREATE TRIGGER 트리거명 ON 테이블명
INSTEAD OF INSERT
AS
BEGIN
..................
END
예제
create table Person
(
id tinyint primary key,
name nvarchar(15) not null,
address nvarchar(10),
)
create trigger NEW_TRIGGER ON Person
AFTER INSERT
as
begin
select * from Person
end
create trigger NEW_TRIGGER1 ON Person
AFTER INSERT
as
begin
select name from Person
end
insert into Person values(3, 'ju nguchang','인천시')
댓글 영역