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

MySQL DATETIME 컬럼의 기본값으로 NOW() 설정하는 방법

MySQL에서는 동적 기본값(dynamic default)을 활용하면 now() 함수를 컬럼의 기본값으로 손쉽게 설정할 수 있습니다. 이 글에서는 datetime 데이터 타입을 가진 테이블을 생성한 뒤, 'MyTime' 컬럼의 기본값으로 현재 날짜와 시간이 자동으로 입력되도록 설정하는 과정을 단계별로 살펴보겠습니다.

1. DATETIME 타입 테이블 생성

먼저 datetime 타입의 컬럼을 포함하는 테이블을 생성합니다. 이때 CURRENT_TIMESTAMP(즉, NOW()와 동일한 기능)를 기본값으로 지정합니다.

mysql> create table DefaultDateTimeDemo
   -> (
   -> MyTime datetime default CURRENT_TIMESTAMP
   -> );
Query OK, 0 rows affected (0.59 sec)

2. 값 없이 레코드 삽입하기

테이블 생성이 완료되면, INSERT 명령 실행 시 아무 값도 전달하지 않습니다. 이렇게 하면 동적 기본값에 의해 해당 컬럼에 현재 날짜와 시간이 자동으로 채워지는 것을 확인할 수 있습니다.

레코드를 삽입하는 쿼리는 다음과 같습니다.

mysql> insert into DefaultDateTimeDemo values();
Query OK, 1 row affected (0.13 sec)

3. 기본값 적용 여부 확인

이제 now()가 기본값으로 제대로 적용되었는지 확인해 보겠습니다. 저장된 레코드를 조회하는 쿼리는 다음과 같습니다.

mysql> select *from DefaultDateTimeDemo;

실행 결과, 현재 날짜와 시간이 자동으로 입력된 것을 확인할 수 있습니다.

+---------------------+
| MyTime              |
+---------------------+
| 2018-11-09 11:58:47 |
+---------------------+
1 row in set (0.00 sec)

4. NOW() 함수와 결과 비교 검증

마지막으로 now() 메서드를 직접 호출하여 위 결과가 올바른지 검증해 보겠습니다.

mysql> select now();

다음은 실행 결과입니다.

+---------------------+
| now()               |
+---------------------+
| 2018-11-09 11:58:40 |
+---------------------+
1 row in set (0.00 sec)

위 샘플 출력을 보면 알 수 있듯이, 두 결과 모두 동일한 시간대의 값을 반환합니다. 즉, CURRENT_TIMESTAMP를 기본값으로 설정하면 별도의 값을 입력하지 않아도 레코드가 생성되는 시점의 날짜와 시간이 자동으로 기록됩니다.

참고: MySQL 5.6.5 버전부터는 DATETIME 타입에도 CURRENT_TIMESTAMP를 기본값으로 사용할 수 있으며, 그 이전 버전에서는 TIMESTAMP 타입에만 적용 가능했습니다. 또한 MySQL 8.0에서는 DEFAULT (NOW())처럼 함수 형태로 직접 명시하는 방식도 지원하므로, 사용 중인 버전에 맞는 문법을 선택하시기 바랍니다.