MySQL에서 AFTER DELETE를 사용하면 DELETE 작업이 실행된 이후에 트리거가 자동으로 발동되도록 설정할 수 있습니다. 이는 삭제된 데이터의 로그를 남기거나, 삭제 시점의 사용자 정보와 시간을 기록하는 등의 용도로 매우 유용합니다.
AFTER DELETE 트리거 기본 문법
AFTER DELETE 트리거를 생성하는 기본 문법은 다음과 같습니다.
DELIMITER //
CREATE TRIGGER yourTriggerName
AFTER DELETE
ON yourTableName FOR EACH ROW
BEGIN
yourStatement1,
.
.
N
END;
//
예제 테이블 생성하기
먼저 예제로 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable(Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,FirstName varchar(100));
Query OK, 0 rows affected (0.62 sec)
데이터 삽입하기
INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.12 sec)저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select *from DemoTable;
위 쿼리는 아래와 같은 결과를 출력합니다.
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | John |
| 2 | Mike |
+----+-----------+
2 rows in set (0.00 sec)
AFTER DELETE 트리거 생성하기
다음은 AFTER DELETE를 활용하여 트리거를 생성하는 쿼리입니다. 이 트리거는 레코드가 삭제될 때마다 현재 접속 중인 사용자와 삭제 시각을 세션 변수에 저장합니다.
mysql> DELIMITER //
mysql> CREATE TRIGGER history_of_Table
AFTER DELETE
ON DemoTable FOR EACH ROW
BEGIN
SELECT USER() INTO @userName;
SELECT NOW() INTO @deleteDatetime;
END; //
Query OK, 0 rows affected (0.18 sec)
mysql> DELIMITER ;
트리거 동작 확인하기
트리거가 정상적으로 작동하는지 확인하려면 테이블에서 첫 번째 레코드를 삭제해 봅니다.
mysql> delete from DemoTable where Id=1;
Query OK, 1 row affected (0.26 sec)
위 명령으로 첫 번째 레코드(Id=1)가 삭제되었습니다. 즉, DELETE 명령이 실행된 직후 트리거가 활성화되어야 합니다.
삭제를 수행한 사용자 확인
세션 변수 @userName을 조회하면 트리거가 기록한 사용자 정보를 확인할 수 있습니다.
mysql> select @userName;
실행 결과는 다음과 같습니다.
+----------------+
| @userName |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
삭제 시점의 날짜 및 시간 확인
트리거가 작동할 때마다 현재 시간도 함께 저장됩니다. @deleteDatetime 변수를 조회해 보겠습니다.
mysql> select @deleteDatetime;
실행 결과는 다음과 같습니다.
+---------------------+
| @deleteDatetime |
+---------------------+
| 2019-07-09 21:06:31 |
+---------------------+
1 row in set (0.00 sec)
정리
이처럼 MySQL의 AFTER DELETE 트리거를 활용하면 특정 테이블에서 데이터가 삭제될 때마다 누가 언제 삭제했는지 자동으로 추적할 수 있습니다. 감사 로그(audit log) 구축, 데이터 변경 이력 관리 등 실무에서 다양하게 응용할 수 있으니 참고하시기 바랍니다.