[DB] trigger

mary·2024년 1월 23일

DB

목록 보기
5/15

Trigger

: DB에서 어떤 이벤트(INSERT,UPDATE,DELETE)가 발생했을 때 자동적으로 실행되는 프로시저

<주의사항>

  1. RDBMS에서 등록되어 사용되는 것이기 때문에 소스 코드로는 발견할 수 없는 로직이어서 어떤 동작이 일어나는지 파악하기 어렵고 문제가 생겼을 때 대응하기 어렵다

  2. 과용시 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;
  • OLD : UPDATE되기 전의 tuple을 가리킴,
          DELETE된 tuple을 가리킴

-사용자가 마트에서 상품을 구매할 때마다 지금까지 누적된 구매 비용을 구하는 트리거

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;
  • NEW : INSERT된 tuple을 가리킴


출처: https://www.youtube.com/watch?v=mEeGf4ZWQKI&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=13

profile
내 인생을 망치러 온 나의 구원, 개발

0개의 댓글