DB

[MySQL] 트리거 BEFORE / AFTER INSERT 실무 활용법 🔄

인생아 2025. 7. 3. 14:08
반응형

MySQL에서는 트리거(Trigger)를 활용해 데이터의 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 시 자동으로 특정 로직을 실행할 수 있다. 특히 BEFORE INSERT, AFTER INSERT 트리거는 데이터가 추가되기 전후에 유효성 검사, 로그 기록, 자동 초기화 작업 등을 처리할 때 매우 유용하다.

BEFORE INSERT: INSERT 수행 전에 실행됨
AFTER INSERT: INSERT 수행 후에 실행됨

🧱 트리거 기본 구조

CREATE TRIGGER 트리거명
{BEFORE | AFTER} INSERT
ON 테이블명
FOR EACH ROW
BEGIN
  -- 트리거 실행 로직
END;
  • NEW.column_name: 삽입될 데이터의 컬럼 값을 의미함
  • 트리거는 FOR EACH ROW 단위로 실행되며, SELECT, SET, IF, INSERT, UPDATE, DELETE 등을 포함할 수 있다
반응형

⚙️ BEFORE INSERT 트리거 예제 - 값 자동 초기화

회원가입 시 user_level이 비어 있으면 기본값으로 'basic'을 자동 삽입한다.

CREATE TRIGGER before_user_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
  IF NEW.user_level IS NULL THEN
    SET NEW.user_level = 'basic';
  END IF;
END;

이제 애플리케이션에서 user_level을 보내지 않아도, 자동으로 'basic'이 설정된다.

📝 AFTER INSERT 트리거 예제 - 로그 테이블 기록

주문 데이터가 저장된 직후, 로그 테이블에 자동으로 기록한다.

CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
  INSERT INTO order_log (order_id, action, created_at)
  VALUES (NEW.id, 'insert', NOW());
END;

이 구조는 감사 로그(Audit Log) 구현에 자주 사용되며, 보안이나 데이터 추적에 매우 효과적이다.

반응형

🛠️ 실무에서 자주 쓰이는 활용 예시

사용 목적 BEFORE INSERT AFTER INSERT
기본값 자동 세팅 ✅ 가능 ❌ 불가능
입력값 유효성 검증 ✅ 가능 ❌ 불가능
감시 및 로그 기록 ❌ 제한적 ✅ 적합
연결된 테이블 자동 생성 ❌ 권장안함 ✅ 많이 사용됨
❗ 주의사항
  • 하나의 테이블에 동일 이벤트(BEFORE INSERT 등) 트리거는 하나만 생성 가능
  • 트리거 안에서 CALL 프로시저를 사용할 수도 있으나, 루프나 무한 실행에 주의해야 함
  • 트리거는 SHOW TRIGGERS; 명령으로 확인 가능하며, DROP TRIGGER 트리거명;으로 삭제 가능

📚 참고 공식 문서

MySQL Trigger 문서
🔗 https://dev.mysql.com/doc/refman/8.0/en/triggers.html

반응형