MySQL에서 DEFAULT CURRENT_TIMESTAMP와 ON UPDATE CURRENT_TIMESTAMP 옵션을 사용하면, 해당 컬럼은 기본값으로 현재 타임스탬프를 가지며, 레코드가 수정될 때마다 자동으로 현재 시간으로 갱신됩니다.
이 두 옵션은 게시글의 작성일·수정일 관리, 로그 기록 등 데이터 변경 이력을 추적해야 하는 상황에서 매우 유용하게 활용됩니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable737 (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(100),
StudentAdmissiondate datetime
);
Query OK, 0 rows affected (0.68 sec)2. DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 적용
다음은 ALTER TABLE 문을 사용하여 컬럼의 데이터 타입을 timestamp로 변경하고, 두 옵션을 함께 적용하는 쿼리입니다.
mysql> alter table DemoTable737 modify column StudentAdmissiondate timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; Query OK, 0 rows affected (2.20 sec) Records: 0 Duplicates: 0 Warnings: 0
참고: DATETIME 타입도 MySQL 5.6.5 이상부터는 DEFAULT CURRENT_TIMESTAMP와 ON UPDATE CURRENT_TIMESTAMP를 지원합니다. 다만 이전 버전에서는 TIMESTAMP 타입만 이 기능을 사용할 수 있습니다.
3. 테이블 구조 확인
변경 사항이 제대로 적용되었는지 DESC 명령어로 테이블 구조를 확인해 보겠습니다.
mysql> desc DemoTable737;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+----------------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +----------------------+--------------+------+-----+-------------------+-----------------------------+ | StudentId | int(11) | NO | PRI | NULL | auto_increment | | StudentName | varchar(100) | YES | | NULL | | | StudentAdmissiondate | timestamp | YES | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +----------------------+--------------+------+-----+-------------------+-----------------------------+ 3 rows in set (0.01 sec)
결과 분석
출력 결과를 보면 StudentAdmissiondate 컬럼의 Default 값이 CURRENT_TIMESTAMP로 설정되었고, Extra 항목에 on update CURRENT_TIMESTAMP가 표시된 것을 확인할 수 있습니다.
- DEFAULT CURRENT_TIMESTAMP: 새 레코드가 삽입될 때 값을 명시하지 않으면 자동으로 현재 시간이 저장됩니다.
- ON UPDATE CURRENT_TIMESTAMP: 해당 행의 다른 컬럼 값이 변경되어 UPDATE가 발생하면, 이 컬럼도 자동으로 최신 시간으로 갱신됩니다.
이처럼 두 옵션을 함께 사용하면 별도의 애플리케이션 로직 없이도 데이터베이스 차원에서 생성 시각과 최종 수정 시각을 손쉽게 관리할 수 있습니다.