logo

[SQLite] 트리거

SQLite에서 TRIGGER는 특정 데이터베이스 이벤트(예: 테이블에 대한 INSERT, UPDATE, DELETE 작업)가 발생했을 때 자동으로 실행되는 사용자 정의 작업 또는 쿼리 집합입니다. TRIGGER를 사용하면 데이터의 무결성을 유지하고, 복잡한 비즈니스 로직을 처리하며, 데이터 변경에 대한 감사 로그를 유지하는 등 다양한 작업을 자동화할 수 있습니다.

다음 예시는 직원 테이블에서 직원이 삭제될 때 로그를 기록하합니다.

CREATE TRIGGER LogDeleteEmployee
AFTER DELETE
ON Employees
FOR EACH ROW
BEGIN
    INSERT INTO EmployeeChanges (EmployeeID, ChangeType, ChangeDate)
    VALUES (OLD.EmployeeID, 'DELETE', CURRENT_TIMESTAMP);
END;
 

AFTER/BEFORE/INSTEAD OF

AFTER DELETE에서 AFTER는 트리거의 실행 시점을 결정합니다. 여기에는 세 가지 옵션이 있습니다.

  • BEFORE: 지정된 이벤트가 테이블에 적용되기 전에 TRIGGER가 실행됩니다.
  • AFTER: 지정된 이벤트가 테이블에 적용된 후에 TRIGGER가 실행됩니다.
  • INSTEAD OF: 주로 뷰에 대한 작업을 처리할 때 사용되며, 지정된 이벤트 대신 TRIGGER가 실행됩니다.
 

DELETE/INSERT/UPDATE

AFTER DELETE에서 DELETE는 트리거의 실행 조건을 결정합니다. 여기에도 세 가지 옵션이 있습니다.

  • DELETE: 테이블에서 행이 삭제될 때 TRIGGER가 실행됩니다.
  • INSERT: 테이블에 새로운 행이 추가될 때 TRIGGER가 실행됩니다.
  • UPDATE: 테이블의 행이 업데이트될 때 TRIGGER가 실행됩니다. 특정 열에 대한 업데이트를 감지하려면 UPDATE OF column_name 구문을 사용합니다.
 

FOR EACH ROW

이 옵션은 TRIGGER가 각 행에 대해 개별적으로 실행되어야 함을 나타냅니다. SQLite는 FOR EACH ROW 옵션만 지원하기 때문에 생략해도 됩니다.

 

WHEN

특정 조건이 참일 때만 TRIGGER가 실행되도록 조건을 지정합니다.

 

삭제

트리거는 DROP TRIGGER로 삭제할 수 있습니다.

DROP TRIGGER LogDeleteEmployee;
Previous
인덱스
Next