logo

[MySQL] 트리거

MySQL에서 "트리거"는 특정 조건이 충족될 때 자동으로 실행되는 데이터베이스 명령어나 SQL 코드 조각을 말합니다. 즉, 데이터베이스 테이블에서 INSERT, UPDATE, DELETE 등의 이벤트가 발생하면 자동으로 특정 작업을 수행하도록 설계된 프로그래밍 가능한 객체입니다. 데이터의 일관성을 유지하고, 복잡한 비즈니스 로직을 처리하는 데 도움을 줍니다.

 

트리거란 무엇인가?

트리거는 데이터베이스 테이블에 대한 변경(추가, 수정, 삭제)이 발생할 때 자동으로 실행되는 프로시저입니다. 사용자가 직접 호출하는 일반 프로시저와 달리, 데이터에 대한 특정 조작이 발생할 때 데이터베이스 시스템에 의해 자동으로 실행됩니다.

 

트리거의 작동 방식

트리거는 주로 다음 세 가지 유형의 데이터베이스 이벤트에 응답하여 작동합니다.

  1. INSERT: 새로운 행이 테이블에 추가될 때 실행됩니다.
  2. UPDATE: 테이블의 행이 수정될 때 실행됩니다.
  3. DELETE: 테이블의 행이 삭제될 때 실행됩니다.

트리거는 'BEFORE' 또는 'AFTER' 이벤트로 설정할 수 있습니다. 예를 들어, 'BEFORE INSERT' 트리거는 테이블에 행이 추가되기 전에 실행되며, 'AFTER DELETE' 트리거는 테이블에서 행이 삭제된 후에 실행됩니다.

트리거의 구성 요소는 다음과 같습니다:

  • 트리거 이름: 트리거를 식별하는 고유 이름.
  • 트리거 이벤트: 트리거가 반응하는 이벤트 (INSERT, UPDATE, DELETE).
  • 트리거 타이밍: 트리거 실행 시점 (BEFORE, AFTER).
  • 트리거가 실행될 테이블: 트리거가 적용되는 대상 테이블.
  • 트리거 명령문: 실제로 실행될 SQL 명령문.
 

MySQL에서 트리거 사용의 이점

  1. 데이터 무결성 유지: 트리거를 사용하여 테이블 간 관계를 유지하고, 데이터베이스 규칙을 강제하는 등 데이터의 무결성을 보장할 수 있습니다.

  2. 자동화: 데이터에 대한 일정한 규칙이나 로직을 자동으로 처리할 수 있어, 프로그램이나 응용 프로그램 코드에서 별도로 구현할 필요가 없습니다.

  3. 보안 강화: 특정 데이터베이스 작업을 감시하고, 비정상적인 활동이나 조건을 감지해서 경고하거나 차단하는데 사용될 수 있습니다.

  4. 로그 및 히스토리 관리: 데이터 변경사항에 대한 로그를 자동으로 생성하여, 데이터 변경 내역을 추적 및 관리하는데 유용합니다.

 

예시: AFTER INSERT 트리거

다음은 'orders' 테이블에 새로운 주문이 추가될 때, 이를 'order_log' 테이블에 로깅하기 위한 간단한 AFTER INSERT 트리거의 예입니다.

DELIMITER $$

CREATE TRIGGER after_order_insert
AFTER INSERT
   ON orders FOR EACH ROW

BEGIN

   INSERT INTO order_log(order_id, log_time)
   VALUES (NEW.order_id, NOW());

END$$

DELIMITER ;

이 트리거는 'orders' 테이블에 새로운 행이 추가될 때마다 'order_log' 테이블에 새로운 로그를 추가합니다. 여기서 NEW 키워드는 새롭게 추가된 행의 컬럼 값을 참조합니다.

이와 같이 트리거를 사용하면 데이터베이스 레벨에서 데이터 관리 및 조작 작업을 자동화하고, 보다 강력하고 효율적인 데이터 관리가 가능해집니다.

Previous
인덱스
Next