기본키 자동 발급

자동 증가의 목표는 연속 번호가 아니라 충돌 없는 식별자입니다.

여러 사용자가 동시에 INSERT해도 같은 기본키가 나오지 않도록 DBMS가 번호 발급을 전담합니다. 차이는 발급기가 어디에 놓이고, SQL에서 어떻게 드러나는지입니다.

동시 INSERT 요청 여러 세션이 새 행을 거의 동시에 저장하려고 합니다.
DBMS 발급기 통과 시퀀스, 내부 카운터, IDENTITY가 새 식별자 값을 원자적으로 냅니다.
기본키에 저장 행마다 다른 ID가 들어가고 PK/UNIQUE가 최종 충돌을 막습니다.

Oracle

SEQUENCE
위치 테이블 밖의 독립 객체입니다. 한 시퀀스를 여러 곳에서 쓸 수 있습니다.
문법 emp_seq.NEXTVAL을 INSERT 값으로 넣습니다.
해석 발급기를 명시적으로 만들고 호출하므로 제어 지점이 또렷합니다.

MySQL

AUTO_INCREMENT
위치 증가 규칙이 해당 테이블의 숫자 컬럼 속성으로 붙습니다.
문법 ID 컬럼을 생략하면 다음 값이 자동으로 채워집니다.
조회 LAST_INSERT_ID()는 현재 세션의 최근 값을 봅니다.

PostgreSQL

IDENTITY
위치 컬럼 선언처럼 보이지만 실제 발급은 시퀀스 기반으로 동작합니다.
문법 SERIAL은 전통 방식, IDENTITY는 표준 방식입니다.
선택 새 설계에서는 의도가 명확한 IDENTITY를 우선 고려합니다.
금지 패턴

MAX(id)+1은 동시 삽입에서 중복 위험이 큽니다. 기본키 값은 DBMS 발급기를 맡깁니다.

설계 기준

내부 식별자는 자동 증가로 충분하지만, 주문번호처럼 의미 있는 번호는 별도 규칙으로 설계합니다.

핵심 이해

자동 증가는 순서의 미학보다 고유성과 동시성을 해결하는 장치입니다.