[DB/Postgres] SERIAL 데이터 타입 이해하기 : Auto Increment Column
목차
반응형
해당 글에서는 PostgreSQL에서 Auto Increment로 사용되는 Serial데이터 타입에 대해서 알아봅니다.
1) Auto Increment
💡 Auto Increment
- 데이터베이스에서 자동으로 값을 증가시키는 기능을 의미합니다. - 주로 테이블의 기본키(Primary Key)에 사용되며, 새로운 레코드가 추가될 때마다 자동으로 고유한 숫자 값이 증가하여 할당됩니다.
2) Serial Data Type
💡 Serial Data Type
- 자동 증가하는 정수 값을 생성하는 특수한 데이터 타입을 의미합니다. - 일반적으로 기본 키 필드에서 사용됩니다.
1. Serial 타입의 종류
💡 Serial 타입의 종류
- Serial 타입의 종류로는 SMALLSERIAL, SERIAL, BIGSERIAL로 구성이 되어 있습니다.
데이터 타입
Storage Size
범위
설명
SMALLSERIAL(=SERIAL2)
2byte
1 to 32,767
16비트 정수 값의 자동 생성 열을 나타내는 데이터 타입입니다.
SERIAL(=SERIAL4)
4byte
1 to 2,147,483,647
32비트 정수 값의 자동 생성 열을 나타내는 데이터 타입입니다
BIGSERIAL(=SERIAL8)
8byte
1 to 9,223,372,036,854,775,807
64비트 정수 값의 자동 생성 열을 나타내는 데이터 타입입니다
2. Serial 타입 vs Sequence 객체
💡 시퀀스(Sequence) - 일련의 정수 값을 생성하는 데이터베이스 객체입니다.
- 일반적으로 테이블의 기본 키 필드와 같은 곳에서 사용되어 새로운 레코드가 추가될 때마다 자동으로 증가하거나 사용자가 지정한 규칙에 따라 증가하는 값을 제공합니다. - 특정 테이블에 속하지 않고 데이터베이스 전체에서 공유될 수 있으므로, 여러 테이블에서 동일한 시퀀스 값을 사용하는 것이 가능합니다.
분류
Serial 타입
Sequence 객체
정의
자동적으로 증가하는 정수를 생성하는 데이터 타입
사용자가 지정하는 규칙에 따라 일련번호를 생성하는 객체
사용 용도
주로 기본 키로 사용
테이블의 특정 컬럼에 일련번호를 생성하거나, 여러 테이블에 걸쳐 일련번호를 생성하는 등 다양한 용도로 사용
사용 방법
CREATE TABLE 문의 컬럼 데이터 타입으로 SERIAL을 지정
CREATE SEQUENCE 문으로 시퀀스를 생성 후, NEXTVAL 함수를 사용하여 일련번호를 생성
특징
내부적으로 시퀀스를 생성하여 사용
사용자가 직접 시퀀스의 규칙을 지정 가능
2.1. Serial 타입을 포함한 테이블을 생성하면 Sequence 객체도 생성된다.
💡 최초 테스트 스키마 내에서 아래와 같이 시퀀스 영역은 존재하지 않았습니다.
💡 아래의 SQL 문을 입력하여 테이블을 생성하였습니다.
- 테이블 내에는 user_sq로 SERIAL 타입이 포함되어 있습니다.
-- DDL
create table tb_user
(
user_sq SERIAL not null
primary key,
user_id text,
user_pw text,
user_nm text,
user_st text
);
alter table tb_user
owner to localmaster;
💡 실제 따로 시퀀스 객체를 생성하지 않았지만 시퀀스가 생김을 확인할 수 있습니다.
2.2. SERIAL 타입도 nextval()을 통해 가져올 수 있는가?
💡 SERIAL 타입도 nextval()을 통해 가져올 수 있는가?
-결론은 가능합니다. 시퀀스로 생성이 되었기에 시퀀스의 다음 값을 가지는 nextval()을 통해서 호출이 가능합니다.
- 생성한 스키마와 테이블, 컬럼명을 입력하여 시퀀스로 조회하고 nextval()을 통해 다음 값을 호출하면 현재 SERIAL 타입의 마지막 다음 값을 반환받을 수 있습니다.
- 특정 컬럼에 지정한 기본 값을 의미합니다. 데이터를 입력할 때 해당 컬럼에 대해 값을 명시적으로 지정하지 않았을 경우에 사용됩니다.
항목
SERIAL 타입
DEFAULT 속성
정의
자동적으로 증가하는 정수를 생성하는 데이터 타입
특정 컬럼에 대한 기본 값을 설정
주로 사용되는 경우
주로 기본 키로 사용
데이터를 입력할 때 해당 컬럼에 대해 값을 명시적으로 지정하지 않았을 경우
자동 증가
새로운 레코드가 추가될 때마다 자동으로 증가
자동 증가 기능 없음
데이터 타입
정수
어떤 데이터 타입이든 설정 가능
3) Serial Type 테이블 컬럼 생성 및 컬럼 값 추가
1. 테이블 컬럼 생성
CREATE TABLE fruits(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL
);
💡 위에서 SERAIL 타입을 둔 컬럼을 테이블로 생성하면 아래의 과정을 통해 SEQUENCE도 역시 생성이 됩니다.
CREATE SEQUENCE table_name_id_seq;
CREATE TABLE table_name (
id integer NOT NULL DEFAULT nextval('table_name_id_seq')
);
ALTER SEQUENCE table_name_id_seq
OWNED BY table_name.id;
2. 테이블 컬럼 값 추가
-- [CASE1] SERIAL 타입은 자동 채번이 되기에 추가 시 무시하셔도 됩니다.
INSERT INTO fruits(name)
VALUES('Orange');
-- [CASE2] SERIAL 타입에 대해 DEFAULT로 값을 넣으면 자동 채번이 됩니다.
INSERT INTO fruits(id,name)
VALUES(DEFAULT, 'Apple');
3. SERIAL 생성 이후 반환받기
💡 SERIAL 생성 이후 반환받기
- RETURNING <<컬럼명>>을 통해서 INSERT 작업을 수행한 뒤 응답 값으로 SERIAL 타입으로 지정한 id를 반환받습니다.
-- INSERT를 수행하고 SERAIL 타입의 컬럼명인 'ID'를 입력하면 입력된 값을 반환 받을 수 있습니다.
INSERT INTO fruits(name)
VALUES('Banana')
RETURNING id;