44강 SQL 초석 다지기 : PostgreSQL SERIAL
PostgreSQL
SQL 초석 다지기 44강 시작합니다.
본 강의는 PostgreSQL Tutorial을 참조합니다. https://www.postgresqltutorial.com/ |
이번 시간에는
▶ PostgreSQL SERIAL pseudo-type
에 대해서 알아보는 시간입니다.
이번 강의에서는 PostgreSQL SERIAL 의사 유형과 SERIAL을 사용하여 테이블에서 자동 증가 열을 정의하는 방법에 대해 배울 것입니다.
Introduction to the PostgreSQL SERIAL pseudo-type
pseudo-type : data type은 아니나 유사한 형태를 지칭함. serial type은 1씩 자동증가하는 특성을 가짐 |
PostgreSQL에서 시퀀스는 정수의 시퀀스를 생성하는 특수한 종류의 데이터베이스 객체이다. 시퀀스는 종종 테이블의 주 키 열로 사용됩니다.
새 테이블을 만들 때 다음과 같이 SERIAL 유사 유형을 통해 시퀀스를 만들 수 있습니다.
CREATE TABLE table_name(
id SERIAL
);
SERIAL 유사 유형을 ID 열에 할당함으로써 PostgreSQL은 다음을 수행합니다.
● 먼저 시퀀스 개체를 만들고 시퀀스에서 생성된 다음 값을 열의 기본값으로 설정합니다.
● 둘째, 시퀀스가 항상 NULL이 아닌 값인 정수를 생성하므로 NOT NULL 제약 조건을 id 열에 추가합니다.
● 셋째, 시퀀스의 소유자를 ID 열에 할당합니다. 결과적으로 ID 열 또는 테이블이 삭제되면 시퀀스 개체가 삭제됩니다.
다음 문장은 숨긴 의미가 있습니다.
CREATE TABLE table_name(
id SERIAL
);
그 의미는 다음 문장에 해당합니다.
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;
시퀀스를 정의하고 정의된 시퀀스를 키로 사용하는 것이 SERIAL pseudo-types 사용으로 해결됩니다.
PostgreSQL은 다음과 같은 특성을 가진 세 가지 SERIAL pseudo-types, SMALLSERIAL, SERIAL 및 BIGSERIAL을 제공합니다.
Name | Storage Size | Range |
SMALLSERIAL | 2 bytes | 1 to 32,767 |
SERIAL | 4 bytes | 1 to 2,147,483,647 |
BIGSERIAL | 8 bytes | 1 to 9,223,372,036,854,775,807 |
PostgreSQL SERIAL example
SERIAL이 암시적으로 열에 인덱스를 만들거나 열을 주 키 열로 만들지는 않습니다. 그러나 SERIAL 열에 기본 키 제약 조건을 지정하여 쉽게 수행할 수 있습니다.
다음 문은 ID 열을 SERIAL 열로 사용하여 과일 테이블을 만듭니다.
CREATE TABLE fruits(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL
);
테이블에 행을 삽입할 때 SERIAL 열의 기본값을 할당하려면 열 이름을 무시하거나 INSERT 문에서 DEFAULT 키워드를 사용합니다.
다음 예를 참조하십시오.
INSERT INTO fruits(name)
VALUES('Orange');
or
INSERT INTO fruits(id,name)
VALUES(DEFAULT,'Apple');
두 행을 과일 테이블에 삽입하고 ID 열의 값은 1과 2입니다.
SELECT * FROM fruits;
테이블에서 SERIAL 열의 시퀀스 이름을 가져오려면 다음과 같이 pg_get_serial_sequence() 함수를 사용합니다.
pg_get_serial_sequence('table_name','column_name')
SELECT pg_get_serial_sequence('fruits', 'id');
public 스키마에 fruits_id_seq가 생성되었습니다.
시퀀스 이름을 currval() 함수에 전달하여 시퀀스에서 생성된 최근 값을 가져올 수 있습니다. 예를 들어, 다음 문은 fruits_id_seq 개체에 의해 생성된 최근 값을 반환합니다.
SELECT currval(pg_get_serial_sequence('fruits', 'id'));
currval 대신에 nextval을 사용하면, 다음 값을 리턴하고 현재값도 1 증가 합니다.
테이블에 새로운 값이 입력되면, 내부적으로 nextval을 가지고 와서 입력합니다.
그게 SERIAL TYPE의 특징입니다.
테이블에 새 행을 삽입할 때 시퀀스에서 생성된 값을 가져오려면 INSERT 문에서 RETURNING id 절을 사용합니다.
다음 문은 과일 테이블에 새 행을 삽입하고 ID 열에 대해 생성된 값을 반환합니다.
INSERT INTO fruits(name)
VALUES('Banana')
RETURNING id;
시퀀스 생성기 작업이 트랜잭션에 안전하지는 않습니다. 즉, 두 개의 동시 데이터베이스 연결이 시퀀스에서 다음 값을 가져오려고 하면 각 클라이언트가 다른 값을 얻게 됩니다. 한 클라이언트가 트랜잭션을 롤백하면 해당 클라이언트의 시퀀스 번호가 사용되지 않아 시퀀스에 공백이 발생합니다.
그렇다고 중복이 발생하지는 않습니다.
이 강의에서는 PostgreSQL 유사 유형 SERIAL을 사용하여 테이블에 대한 자동 증가 열을 만드는 방법에 대해 배웠습니다.
수고하셨습니다.
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
46강 SQL 초석 다지기 : PostgreSQL Timestamp Data Type (6) | 2022.12.24 |
---|---|
45강 SQL 초석 다지기 : PostgreSQL DATE data type (4) | 2022.12.24 |
43강 SQL 초석 다지기 : PostgreSQL Integer Type (5) | 2022.12.23 |
42강 SQL 초석 다지기 : PostgreSQL NUMERIC Type (4) | 2022.12.22 |
41강 SQL 초석 다지기 : PostgreSQL Character Types: CHAR, VARCHAR, TEXT (3) | 2022.12.22 |
댓글