Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 DEFAULT CURRENT_TIMESTAMP와 ON UPDATE CURRENT_TIMESTAMP 설정하는 방법

MySQL에서 DEFAULT CURRENT_TIMESTAMPON 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_TIMESTAMPON 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가 발생하면, 이 컬럼도 자동으로 최신 시간으로 갱신됩니다.

이처럼 두 옵션을 함께 사용하면 별도의 애플리케이션 로직 없이도 데이터베이스 차원에서 생성 시각과 최종 수정 시각을 손쉽게 관리할 수 있습니다.