- 일반적으로 테이블의 기본 키 필드와 같은 곳에서 사용되어 새로운 레코드가 추가될 때마다 자동으로 증가하거나 사용자가 지정한 규칙에 따라 증가하는 값을 제공합니다. - 특정 테이블에 속하지 않고 데이터베이스 전체에서 공유될 수 있으므로, 여러 테이블에서 동일한 시퀀스 값을 사용하는 것이 가능합니다.
분류
Serial 타입
Sequence 객체
정의
자동적으로 증가하는 정수를 생성하는 데이터 타입
사용자가 지정하는 규칙에 따라 일련번호를 생성하는 객체
사용 용도
주로 기본 키로 사용
테이블의 특정 컬럼에 일련번호를 생성하거나, 여러 테이블에 걸쳐 일련번호를 생성하는 등 다양한 용도로 사용
사용 방법
CREATE TABLE 문의 컬럼 데이터 타입으로 SERIAL을 지정
CREATE SEQUENCE 문으로 시퀀스를 생성 후, NEXTVAL 함수를 사용하여 일련번호를 생성
특징
내부적으로 시퀀스를 생성하여 사용
사용자가 직접 시퀀스의 규칙을 지정 가능
2.1. Serial 타입을 포함한 테이블을 생성하면 Sequence 객체도 생성된다.
💡 최초 테스트 스키마 내에서 아래와 같이 시퀀스 영역은 존재하지 않았습니다.
💡 아래의 SQL 문을 입력하여 테이블을 생성하였습니다.
- 테이블 내에는 user_sq로 SERIAL 타입이 포함되어 있습니다.
-- DDLcreatetable tb_user
(
user_sq SERIAL notnullprimary key,
user_id text,
user_pw text,
user_nm text,
user_st text
);
altertable tb_user
owner to localmaster;
💡 실제 따로 시퀀스 객체를 생성하지 않았지만 시퀀스가 생김을 확인할 수 있습니다.
2.2. SERIAL 타입도 nextval()을 통해 가져올 수 있는가?
💡 SERIAL 타입도 nextval()을 통해 가져올 수 있는가?
-결론은 가능합니다. 시퀀스로 생성이 되었기에 시퀀스의 다음 값을 가지는 nextval()을 통해서 호출이 가능합니다.
- 생성한 스키마와 테이블, 컬럼명을 입력하여 시퀀스로 조회하고 nextval()을 통해 다음 값을 호출하면 현재 SERIAL 타입의 마지막 다음 값을 반환받을 수 있습니다.
-- [CASE1] SERIAL 타입은 자동 채번이 되기에 추가 시 무시하셔도 됩니다.INSERTINTO fruits(name)
VALUES('Orange');
-- [CASE2] SERIAL 타입에 대해 DEFAULT로 값을 넣으면 자동 채번이 됩니다.INSERTINTO fruits(id,name)
VALUES(DEFAULT, 'Apple');