SQL에서 Triger란?
- 데이터베이스에서 어떤 이벤트가 발생되었을 때 자동적으로 실행되는 프로시저(procedure)을 의미합니다. 예를들어서 insert, update, delete가 발생했을 때 이것이 계기가 되어 자동적으로 실행되는 프로시저(procedure)를 의미합니다.
trigger 사용법
사용자의 닉네임 변경 이력을 저장하는 트리거
delimiter $$
create trigger log_user_nickname_trigger
before update
-- users 테이블을 대상
on users for each row
begin
-- old는 update 되기 전의 tuple을 가리킴
-- 또는 delete된 tuple을 가리킴
insert into users_log values(old.id, old.nickname, now());
end
$$
delimiter ;
사용자가 마트에서 상품을 구매할 때마다 지금까지 누적된 구매 비용을 구하는 트리거
delimiter $$
create trigger sum_by_prices_trigger
after insert
on buy for each row
begin
declare total int;
-- new는 insert된 tuple을 가리킴
-- 또는 update된 후의 tuple을 가리킴
declare user_id int default new.user_id;
select sum(price) into total from buy where user_id = user_id;
update user_buy_stats set price_sum = total where user_id = user_id;
end
$$
delimiter ;
trigger 사용 시 주의사항
- 서버 소스 코드에 있지 않고 RDBMS에 등록하여 해당하는 이벤트가 발생되었을 때 자동으로 호출되는 방식이기 때문에 어떤 동작이 일어나는지 파악하기 어렵고 문제가 생겼을 때 대응하기 어렵습니다.
- 등록한 trigger가 많아지면 trigger에 의해 또 다른 trigger가 호출되는 복잡한 상황이 발생될 수 있습니다.
- 과도한 trigger 사용은 DB 서버의 CPU 사용률을 증가시켜 부하가 발생될 수 있습니다.