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 사용률을 증가시켜 부하가 발생될 수 있습니다.




+ Recent posts