: DB에서 어떤 이벤트(INSERT,UPDATE,DELETE)가 발생했을 때 자동적으로 실행되는 프로시저
<주의사항>
RDBMS에서 등록되어 사용되는 것이기 때문에 소스 코드로는 발견할 수 없는 로직이어서 어떤 동작이 일어나는지 파악하기 어렵고 문제가 생겼을 때 대응하기 어렵다
과용시 DB에 부담을 주므로 응답이 느려짐
따라서 유지 보수관리가 쉽지 않아 최후의 수단으로 사용하는 것을 추천....
-닉네임변경시 기존의 닉네임을 보관하는 테이블에 저장시키기
delimiter $$
CREATE TRIGGER log_user_nickname_trigger
BEFORE UPDATE //UPDATE가 발생할 때마다 그 전에 일어날 일
ON users FOR EACH ROW //users테이블에서 update되는 각 ROW에 대해서 트리거 실행
BEGIN
insert into users_log values(OLD.id,OLD.nickname,now());
//기존의 닉네임을 users_log에 저장
END
$$
delimiter;
-사용자가 마트에서 상품을 구매할 때마다 지금까지 누적된 구매 비용을 구하는 트리거
delimiter $$
CREATE TRIGGER sum_buy_prices_trigger
AFTER INSERT //INSERT가 발생할 때마다 그 후에 일어날 일
ON buy FOR EACH ROW //buy테이블에서 insert되는 각 ROW에 대해서 트리거 실행
BEGIN
//변수선언
DECLARE total INT;
DECLARE user_id INT DEFAULT NEW.user_id; //buy테이블에서 insert가 발생한 tuple의 user_id를 변수의 값으로 대입
//구매비용의 총합을 구해서 total변수에 저장
select sum(price) into total from buy where user_id = user_id;
//같은 사용자에 대해서 price_sum attribute에 구매비용(total)을 update
update user_buy_state set price_sum = total where user_id = user_id
END
$$
delimiter;
출처: https://www.youtube.com/watch?v=mEeGf4ZWQKI&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=13