CodeGym /행동 /SQL SELF /DEFAULT 값으로 기본값 사용하기

DEFAULT 값으로 기본값 사용하기

SQL SELF
레벨 17, 레슨 2
사용 가능

가끔은 모든 필드를 일일이 채우기 귀찮거나, 그냥 데이터가 없을 때가 있잖아. 이럴 땐 미리 기본값을 정해두면, DB가 알아서 채워줘서 편해.

테이블에 행 추가하기

기본값은 테이블에 행을 넣을 때랑 엄청 관련 있어. 그래서 지금 간단히 설명하고, 나중에 좀 더 깊게 다룰 거야.

테이블에 행 추가하는 건 진짜 쉬워 — INSERT INTO라는 명령어가 있어. INSERT INTO는 SQL에서 새로운 행을 테이블에 추가하는 명령어야. 웹 폼, 로그, 회원가입, 데이터 업데이트할 때 엄청 자주 써.

명령어 문법

INSERT INTO 테이블 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...);

설명:

  • 테이블 — 데이터를 넣을 테이블 이름.
  • 컬럼1, 컬럼2, ... — 컬럼 이름 나열 (모든 컬럼에 값을 순서대로 넣을 거면 생략 가능).
  • 값1, 값2, ... — 위에 나열한 컬럼에 들어갈 값들.

간단한 예시

INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com');

users 테이블에 한 줄 추가: 이름 — "Alice", email — "alice@example.com".

결과:

id name email
1 Alice alice@example.com

여러 행 한 번에 넣기

여러 개의 레코드도 한 번에 넣을 수 있어 — 훨씬 빠르고 효율적이지.

INSERT INTO users (name, email)
VALUES 
  ('Alice', 'alice@example.com'),
  ('Bob', 'bob@example.net'),
  ('Charlie', 'charlie@example.org'),
  ('Diana', 'diana@example.com'),
  ('Eve', 'eve@example.net');

결과는 이렇게 나와:

id name email
1 Alice alice@example.com
2 Bob bob@example.net
3 Charlie charlie@example.org
4 Diana diana@example.com
5 Eve eve@example.net

기본값

행 추가 명령어 문법 기억나?

INSERT INTO 테이블 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...);

왜 컬럼 리스트 컬럼1, 컬럼2가 필요할까? 그냥 테이블 컬럼 순서대로 값만 넣으면 되는 거 아냐?

사실 많은 값들은 굳이 안 넣어도 돼. 예를 들어 새 행의 ID는 PostgreSQL이 알아서 만들어줘. 현재 날짜/시간도 자동으로 넣어줄 수 있고. 만약 어떤 값을 안 넣으면 PostgreSQL은 그 자리에 NULL을 넣어.

PostgreSQL이 알아서 해주는 게 많아. 그리고 이걸 네가 직접 컨트롤할 수도 있어 — 그게 바로 기본값이고, DEFAULT 키워드로 지정해.

기본값은, 특정 컬럼에 값을 안 넣었을 때 자동으로 적용돼. 이건 시간도 아끼고, 중요한 값을 깜빡하고 빼먹는 실수도 막아줘.

DEFAULT는 어떻게 동작할까?

문법부터 보자. 기본값은 테이블 만들 때 지정해. 기본적인 사용법은 이래:

CREATE TABLE 테이블 (
    컬럼 데이터_타입 DEFAULT 기본값
);

이미 있는 테이블에 기본값을 추가하고 싶으면 이렇게 해:

ALTER TABLE 테이블
ALTER COLUMN 컬럼
SET DEFAULT 기본값;

테이블 수정하는 건 곧 다른 강의에서 자세히 다룰게 :P

예시 1: DEFAULT 필드가 있는 테이블

students 테이블을 만들어서, 학생마다 등록 날짜가 자동으로 들어가게 해보자:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    registration_date DATE DEFAULT CURRENT_DATE
);

이제 registration_date를 안 넣고 학생을 추가하면, PostgreSQL이 자동으로 오늘 날짜를 넣어줘.

INSERT INTO students (name) VALUES ('Alex Lin');

이렇게 조회하면:

SELECT * FROM students;

결과는 이렇게 나와:

id name registration_date
1 Alex Lin 2023-10-15

실전 예시

숫자 컬럼의 기본값

예를 들어 grades 테이블이 있고, grade 컬럼에 아직 점수가 없으면 기본값 0이 들어가게 하고 싶어.

CREATE TABLE grades (
    id SERIAL PRIMARY KEY,
    student_id INTEGER NOT NULL,
    course_id INTEGER NOT NULL,
    grade INTEGER DEFAULT 0
);

grade 없이 레코드 추가해보자:

INSERT INTO grades (student_id, course_id) VALUES (1, 101);

이제 테이블은 이렇게 보여:

id student_id course_id grade
1 1 101 0

TEXT 기본값 사용하기

teachers 테이블에서, 선생님을 추가할 때 자동으로 상태가 'unverified'로 들어가게 해보자.

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    status TEXT DEFAULT 'unverified'
);

상태 없이 선생님을 추가해보자:

INSERT INTO teachers (name) VALUES ('Peter Pall');

결과는 이렇게 나와:

id name status
1 Peter Pall unverified

시간 기본값

meetings 테이블에서, meeting_time 컬럼에 기본 시작 시간을 10:00으로 지정할 수 있어.

CREATE TABLE meetings (
    id SERIAL PRIMARY KEY,
    topic VARCHAR(100),
    meeting_time TIME DEFAULT '10:00'
);

레코드 추가:

INSERT INTO meetings (topic) VALUES ('프로젝트 논의');

결과:

id topic meeting_time
1 프로젝트 논의 10:00

DEFAULT 쓸 때 자주 하는 실수

기본값 타입이 컬럼 타입이랑 다를 때. 숫자 컬럼에 텍스트 값을 기본값으로 넣으려고 하면 PostgreSQL이 에러 내:

CREATE TABLE example (
    number INTEGER DEFAULT 'text'
);

에러: invalid input syntax for type integer.

DEFAULT를 바꿔도 기존 데이터엔 영향 없음. 기본값을 바꿔도 이미 들어간 데이터는 그대로야. 기존 행을 바꾸고 싶으면 UPDATE를 써야 해.

UPDATE students SET registration_date = '2023-01-01' WHERE registration_date IS NULL;

DEFAULT랑 NOT NULL 헷갈리기. 기본값이 있다고 해서 필드가 무조건 필수(NOT NULL)가 되는 건 아냐. NOT NULL을 따로 지정하지 않으면 컬럼에 NULL도 들어갈 수 있어.

2
과제
SQL SELF, 레벨 17, 레슨 2
잠금
숫자 값에 대해 `DEFAULT`를 사용하는 테이블 생성하기
숫자 값에 대해 `DEFAULT`를 사용하는 테이블 생성하기
2
과제
SQL SELF, 레벨 17, 레슨 2
잠금
여러 개의 컬럼에 `DEFAULT` 값 사용하기
여러 개의 컬럼에 `DEFAULT` 값 사용하기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION