MySQL에서는 트리거(TRIGGER)를 활용하면 데이터가 삽입되는 시점에 자동으로 현재 날짜를 기록할 수 있습니다. 이번 글에서는 BEFORE INSERT 트리거와 CURDATE() 함수를 사용하여 테이블에 날짜를 자동으로 넣는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다. 여기서는 DATETIME 타입의 DueDate 컬럼 하나를 가진 테이블을 만들어 보겠습니다.
mysql> create table DemoTable1584
-> (
-> DueDate datetime
-> );
Query OK, 0 rows affected (1.79 sec)
2. 트리거 생성하기
다음은 BEFORE INSERT 트리거를 생성하는 쿼리입니다. 이 트리거는 새로운 행이 삽입되기 전에 실행되며, new.DueDate 값을 curdate() 함수의 반환값, 즉 오늘 날짜로 설정합니다.
mysql> create trigger insertDate before insert on DemoTable1584
-> for each row set new.DueDate=curdate();
Query OK, 0 rows affected (0.22 sec)
트리거가 정상적으로 생성되면, 이후 해당 테이블에 어떤 값을 삽입하더라도 DueDate 컬럼에는 항상 현재 날짜가 자동으로 저장됩니다.
3. 레코드 삽입하기
INSERT 명령을 사용해 테이블에 레코드를 추가합니다. 값 없이 빈 채로 삽입해도 트리거 덕분에 날짜가 자동으로 채워집니다.
mysql> insert into DemoTable1584 values();
Query OK, 1 row affected (0.66 sec)
mysql> insert into DemoTable1584 values();
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1584 values();
Query OK, 1 row affected (0.07 sec)
4. 결과 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1584;
실행 결과는 다음과 같습니다.
+---------------------+
| DueDate |
+---------------------+
| 2019-10-18 00:00:00 |
| 2019-10-18 00:00:00 |
| 2019-10-18 00:00:00 |
+---------------------+
3 rows in set (0.00 sec)
출력 결과를 보면 세 개의 레코드 모두 동일한 날짜(2019-10-18)가 저장된 것을 확인할 수 있습니다. 시간 부분이 00:00:00인 이유는 curdate() 함수가 날짜만 반환하기 때문입니다.
마무리
이처럼 BEFORE INSERT 트리거를 사용하면 애플리케이션 코드를 수정하지 않고도 데이터베이스 차원에서 날짜를 자동으로 기록할 수 있습니다. 생성일자나 마감일 등을 관리할 때 매우 유용한 방법이니 참고하시기 바랍니다.