Database

[MySQL] 날짜형 데이터 기본값 설정

비번변경 2022. 7. 10. 03:21

개요

데이블에 데이터를 추가할 때 값을 지정하지 않은 컬럼이 존재하는 경우, 기본적으로 NULL로 추가된다. 다만 필요시 데이터 추가 시 기본값을 지정할 수 있는데, DATE, DATETIME과 같은 날짜형 데이터를 사용하는 테이블에 데이터를 추가할 때 데이터 추가 시의 시각을 기본값으로 사용하고자 한다.

 

 

DEFAULT

테이블 스키마를 정의할 때 DEFAULT 절을 이용해 컬럼의 명시적 또는 암시적 기본값을 설정할 수 있다. 간단히 DFEAULT 키워드 뒤에 기본값에 해당하는 값을 정의하는 방식으로 설정한다.

CREATE TABLE t1 (
--<name>   <TYPE> DEFAULT <VALUE>
  i     INT DEFAULT -1,
  c     VARCHAR(10) DEFAULT '',
  price DOUBLE(16,2) DEFAULT 0.00
);

 

 

MySQL 8.0.13 이전

한 가지 예외를 제외하고 DEFAULT 기본값은 상수여야 하며, 함수나 표현식이 될 수 없다. 단, TIMESTAMP와 DATETIME 유형의 데이터인 경우 CURRENT_TIMESTAMP를 기본값으로 설정할 수 있다.

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP
);

 

 

MySQL 8.0.13 이후

DEFAULT 기본값은 상수 또는 표현식이 될 수 있다. 몇 가지 경우를 제외하고는 표현식을 사용할 때는 괄호로 묶어야 한다.

CREATE TABLE t1 (
  -- literal defaults
  i INT         DEFAULT 0,
  c VARCHAR(10) DEFAULT '',
  -- expression defaults
  f FLOAT       DEFAULT (RAND() * RAND()),
  b BINARY(16)  DEFAULT (UUID_TO_BIN(UUID())),
  d DATE        DEFAULT (CURRENT_DATE + INTERVAL 1 YEAR),
  p POINT       DEFAULT (Point(0,0)),
  j JSON        DEFAULT (JSON_ARRAY())
);

 

위의 예시에도 나와있지만 날짜형 데이터(DATE)인 경우, CURRENT_DATE라는 표현식을 사용할 수 있다. 또한 CURRENT_TIMESTAMP도 그대로 사용할 수 있다.

CREATE TABLE t1 (
  d DATE DEFAULT (CURRENT_DATE),
  dt DATETIME DEFAULT CURRENT_TIMESTAMP
);

 

 

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html

https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html