[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;