트리거(Trigger)는 데이터베이스 이벤트에 반응하여 실행되는 프로그램 단위이다.
이 글은 그 중 DML 문이 수행될 때 자동으로 동작하는 DML 트리거의 사용법에 대해 정리한 글이다.
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE| DELETE } ON table_name
FOR EACH ROW
BEGIN
trigger_body -- 실핼될 구문
END
상황: tbl_details 에 INSERT 이벤트가 발생한 후에 해당 유저의 point 합을 tbl_details 에 total 값으로 업데이트 해줘야 할 때 아래와 같이 트리거를 생성했다.
환경: MySQL 8
DELIMITER $$
CREATE TRIGGER `sum_trigger` AFTER INSERT ON `tbl_details`
FOR EACH ROW BEGIN
DECLARE _sum INT DEFAULT 0;
SET _sum = (
SELECT SUM(point) FROM TEST_DB.tbl_details
WHERE user_id = new.user_id
);
UPDATE TEST_DB.tbl_sum
SET total = _sum
WHERE user_id = NEW.user_id;
END
$$
** OLD / NEW
OLD: 정의한 이벤트가 발생하기 전의 데이터
NEW: 정의한 이벤트가 발생한 후의 데이터
ex) 위에서 NEW.user_id 는 tbl_details 테이블에 INSERT 된 데이터의 user_id