여러 요청이 새 행을 거의 동시에 저장하려고 한다.
AUTO ID
자동 증가는 순번보다 고유성과 동시성을 해결한다
여러 세션이 동시에 INSERT해도 같은 기본키가 나오지 않도록 DBMS가 번호 발급을 맡는다. 번호 공백은 실패가 아니라 발급 방식의 결과일 수 있다.
시퀀스, 카운터, IDENTITY가 원자적으로 새 값을 낸다.
행마다 다른 ID가 들어가고 PK/UNIQUE가 충돌을 막는다.
| DBMS | 방식 | 설계 포인트 |
|---|---|---|
| Oracle | SEQUENCE |
테이블 밖 발급기를 만들고 NEXTVAL로 호출한다 |
| MySQL | AUTO_INCREMENT |
ID 컬럼을 생략하면 해당 테이블 카운터가 값을 채운다 |
| PostgreSQL | IDENTITY |
컬럼 선언처럼 보이지만 내부적으로 시퀀스가 동작한다 |
금지 패턴: MAX(id)+1은 동시 삽입에서
중복 위험이 크다. 기본키 값은 DBMS 발급기에 맡긴다.