기본값
기본값 (Default Values)
테이블을 설계할 때 "이 열에 값이 안 들어오면 뭘 넣어줄까?"를 정해두고 싶을 때가 있어요. 바로 그게 기본값(default value)이에요. 새 행이 만들어질 때 일부 열에 값이 지정되지 않으면, 그 열들은 각자 정의된 기본값으로 채워져요.
출처: 공식문서
기본값을 정하지 않으면?
명시적으로 기본값을 선언하지 않으면 기본값은 null 값이에요. null 값은 "알 수 없는 데이터"를 나타내는 것으로 볼 수 있으니, 이 동작은 대개 말이 되죠. 데이터 조작 명령에서도 기본값이 뭔지 알 필요 없이 "이 열을 기본값으로 설정해줘"라고 명시적으로 요청할 수 있어요. (자세한 내용은 6장에서 다룹니다.)
기본값 정의하는 법
테이블 정의에서 기본값은 열 데이터 타입 뒤에 나열해요:
CREATE TABLE products (
product_no integer,
name text,
price numeric DEFAULT 9.99
);
기본값은 표현식(expression)일 수도 있어요. 이 표현식은 기본값이 삽입될 때마다 평가되며, 테이블이 생성될 때가 아니라는 점이 중요해요. 흔한 예시로는 timestamp 열에 CURRENT_TIMESTAMP를 기본값으로 두어 행이 삽입된 시각으로 설정되게 하는 경우가 있어요.
시퀀스 번호 만들기
또 하나 흔한 예시는 각 행에 "일련 번호"를 만드는 거예요. PostgreSQL에서는 보통 이런 식으로 처리해요:
CREATE TABLE products (
product_no integer DEFAULT nextval('products_product_no_seq'),
...
);
여기서 nextval() 함수는 시퀀스 객체(sequence object)에서 연속된 값을 공급해줘요. 이 패턴은 워낙 흔해서 전용 축약 표기법이 따로 있는데, 바로 이거예요:
CREATE TABLE products (
product_no SERIAL,
...
);
SERIAL 축약 표기법에 대한 자세한 내용은 8.1.4절을 참고하세요.