자동 번호 생성

핵심은 사람이 번호를 세지 않고, DBMS가 고유 ID 발급을 맡는다는 점입니다.

동시 INSERT에서 중복 기본키를 막기 위해 자동 증가 메커니즘을 씁니다. 차이는 번호 발급기가 테이블 밖에 따로 있느냐, 아니면 컬럼 정의 안에 묶여 있느냐입니다.

공통 목표

MAX(id)+1 같은 수동 계산 대신, 새 행이 들어올 때 DBMS가 바로 다음 값을 배정합니다. 그래서 여러 세션이 동시에 넣어도 번호 충돌을 줄일 수 있습니다.

Oracle 시퀀스
발급 구조

번호 발급기가 테이블 밖의 독립 객체로 존재합니다.

INSERT에서 보이는 것
VALUES (emp_seq.NEXTVAL, '김철수')

INSERT 문에서 NEXTVAL을 직접 써서 값을 가져옵니다.

왜 다르게 느껴지나

발급기를 별도 객체로 다루므로 공유하거나 세밀하게 제어하기 쉽습니다.

MySQL AUTO_INCREMENT
발급 구조

증가 규칙이 해당 테이블의 컬럼 속성으로 붙어 있습니다.

INSERT에서 보이는 것
INSERT INTO employees (name) VALUES ('김철수')

id를 생략하면 테이블이 다음 값을 채웁니다.

왜 다르게 느껴지나

번호 생성이 테이블 안에 묶여 있어서 각 테이블이 자기 증가값을 관리합니다.

PostgreSQL SERIAL / IDENTITY
발급 구조

사용자는 컬럼 선언으로 다루지만, 내부적으로는 시퀀스 개념을 활용합니다.

INSERT에서 보이는 것
id SERIAL id INTEGER GENERATED ALWAYS AS IDENTITY

SERIAL은 전통적 방식, IDENTITY는 SQL 표준에 가깝습니다.

왜 다르게 느껴지나

문법은 컬럼 중심이지만, 개념적으로는 시퀀스의 편의 래퍼처럼 이해하면 읽기 쉽습니다.