MySQL에서는 특정 열을 DEFAULT CURRENT_TIMESTAMP로 선언해 두면, 다른 열에 데이터를 삽입하는 순간 해당 열에 현재 날짜와 시간이 자동으로 기록됩니다. 이 기능은 레코드의 생성 시각을 추적해야 하는 경우 매우 유용합니다.
기본 문법과 테이블 생성 예제
아래 예제는 학생 이름을 저장하는 StudentName 열과, 등록 일시를 자동으로 기록하는 RegDate 열로 구성된 'testing' 테이블을 생성하는 쿼리입니다.
mysql> Create table testing
-> (
-> StudentName varchar(20) NOT NULL,
-> RegDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.49 sec)
위 쿼리를 실행하면 RegDate 열이 TIMESTAMP DEFAULT CURRENT_TIMESTAMP로 선언된 'testing' 테이블이 생성됩니다. 이제 StudentName 열에 값(이름)만 삽입하면, 별도로 날짜나 시간을 지정하지 않아도 RegDate 열에 현재 날짜와 시간이 자동으로 저장됩니다.
데이터 삽입 및 확인
실제로 데이터를 삽입하고 결과를 확인해 보겠습니다.
mysql> Insert into testing(StudentName) values ('Ram');
Query OK, 1 row affected (0.14 sec)
mysql> Insert into testing(StudentName) values ('Shyam');
Query OK, 1 row affected (0.06 sec)
mysql> Select * from testing;
+-------------+---------------------+
| StudentName | RegDate |
+-------------+---------------------+
| Ram | 2017-10-28 21:24:24 |
| Shyam | 2017-10-28 21:24:30 |
+-------------+---------------------+
2 rows in set (0.02 sec)
mysql> Insert into testing(StudentName) values ('Mohan');
Query OK, 1 row affected (0.06 sec)
mysql> Select * from testing;
+-------------+---------------------+
| StudentName | RegDate |
+-------------+---------------------+
| Ram | 2017-10-28 21:24:24 |
| Shyam | 2017-10-28 21:24:30 |
| Mohan | 2017-10-28 21:24:47 |
+-------------+---------------------+
3 rows in set (0.00 sec)위 쿼리 결과에서 확인할 수 있듯이, StudentName 열에 값만 삽입했음에도 불구하고 각 행마다 삽입된 시점의 날짜와 시간이 RegDate 열에 자동으로 기록되었습니다.
활용 포인트
이 개념을 활용하면 다른 열에 데이터가 삽입된 정확한 날짜와 시간을 손쉽게 추적할 수 있습니다. 회원 가입 일시, 주문 생성 시각, 로그 기록 시점 등 레코드 생성 시간 관리가 필요한 거의 모든 상황에서 응용할 수 있으며, 애플리케이션 코드에서 직접 시간을 넣어주지 않아도 되므로 실수를 줄이고 코드를 단순화할 수 있다는 장점이 있습니다.