PostgreSQL 시퀀스와 시퀀스 객체를 사용하여 일련의 숫자를 생성하는 방법

 

정의에 따르면 시퀀스는 정렬된 정수 목록입니다. 순서에서 숫자의 순서가 중요합니다. 

예를 들어, {1,2,3,4,5}및 {5,4,3,2,1}완전히 다른 시퀀스입니다.

 

PostgreSQL의 시퀀스는 지정된 사양을 기반으로 정수 시퀀스를 생성하는 사용자 정의 스키마 바인딩 개체입니다.

CREATE SEQUENCE문 을 사용합니다 .

 

CREATE SEQUENCE [ IF NOT EXISTS ] sequence_name
    [ AS { SMALLINT | INT | BIGINT } ]
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] 
    [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ] 
    [ CACHE cache ] 
    [ [ NO ] CYCLE ]
    [ OWNED BY { table_name.column_name | NONE } ]

sequence_name

 

CREATE SEQUENCE절 뒤에 시퀀스 이름을 지정합니다 .  

IF NOT EXISTS는 조건이 존재하지 않는 경우에만 새로운 시퀀스를 생성한다.

시퀀스 이름은 동일한 스키마의 다른 시퀀스, 테이블, 인덱스 ,  또는 외부 테이블과 구별되어야 합니다 .

[ AS { SMALLINT | INT | BIGINT } ]

시퀀스  데이터 유형  지정합니다 . 

유효한 데이터 유형은 SMALLINT, INT하고 BIGINT. 기본 데이터 유형은 BIGINT건너뛸 경우입니다.

시퀀스의 최소값과 최대값을 결정하는 시퀀스의 데이터 유형입니다.

[ INCREMENT [ BY ] increment ]

increment현재의 시퀀스 값에 부가 될 값 지정 새로운 값을 생성한다.

양수는 오름차순을 만들고 음수는 내림차순을 만듭니다.

기본 증분 값은 1입니다.

[ MINVALUE minvalue | NO MINVALUE ]

[ MAXVALUE maxvalue | NO MAXVALUE ]

시퀀스의 최소값과 최대값을 정의합니다. 

NO MINVALUE및 를 사용하는 경우 NO MAXVALUE시퀀스는 기본값을 사용합니다.

오름차순 시퀀스의 경우 기본 최대값은 시퀀스 데이터 유형의 최대값이고 기본 최소값은 1입니다.

내림차순 시퀀스의 경우 기본 최대값은 -1이고 기본 최소값은 시퀀스 데이터 유형의 최소값입니다.

[ START [ WITH ] start ]

START절 시퀀스의 시작 값을 지정한다.

기본 시작 값은 minvalue오름차순 및 maxvalue내림차순입니다.

cache

 CACHE많은, 시퀀스 번호를 사전에 할당 해 빠른 액세스를 위해 메모리에 저장하는 방법을 결정합니다. 한 번에 하나의 값을 생성할 수 있습니다.

기본적으로 시퀀스는 캐시 없이 한 번에 하나의 값을 생성합니다.

CYCLE | NO CYCLE

 CYCLE한계에 도달하는 경우이 값을 다시 시작 할 수 있습니다. 

다음 숫자는 오름차순 시퀀스의 최소값과 내림차순 시퀀스의 최대값입니다.

를 사용하는 경우 NO CYCLE제한에 도달했을 때 다음 값을 가져오려고 하면 오류가 발생합니다.

 NO CYCLE명시 적으로 지정하지 않은 경우 기본값입니다 CYCLE나 NO CYCLE.

OWNED BY table_name.column_name

 OWNED BY절을 사용하면 테이블 열을 시퀀스와 연결할 수 있으므로 열이나 테이블을 삭제할 때 PostgreSQL이 연결된 시퀀스를 자동으로 삭제합니다.

SERIAL테이블의 열에 의사 유형을 사용할 때 백그라운드에서 PostgreSQL은 열과 연결된 시퀀스를 자동으로 생성합니다.

 

반응형

CREATE SEQUENCE three
INCREMENT -1
MINVALUE 1 
MAXVALUE 3
START 3
CYCLE;
Code language: SQL (Structured Query Language) (sql)
SELECT nextval('three');

 

 

CREATE TABLE order_details(
    order_id SERIAL,
    item_id INT NOT NULL,
    item_text VARCHAR NOT NULL,
    price DEC(10,2) NOT NULL,
    PRIMARY KEY(order_id, item_id)
);

CREATE SEQUENCE order_item_id
START 10
INCREMENT 10
MINVALUE 10
OWNED BY order_details.item_id;
INSERT INTO 
    order_details(order_id, item_id, item_text, price)
VALUES
    (100, nextval('order_item_id'),'DVD Player',100),
    (100, nextval('order_item_id'),'Android TV',550),
    (100, nextval('order_item_id'),'Speaker',250);
SELECT
    order_id,
    item_id,
    item_text,
    price
FROM
    order_details;
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기