가끔은 모든 필드를 일일이 채우기 귀찮거나, 그냥 데이터가 없을 때가 있잖아. 이럴 땐 미리 기본값을 정해두면, 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 | |
|---|---|---|
| 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 | |
|---|---|---|
| 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도 들어갈 수 있어.
GO TO FULL VERSION