개요
데이블에 데이터를 추가할 때 값을 지정하지 않은 컬럼이 존재하는 경우, 기본적으로 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