logo

PostgreSQL 시리얼

이 섹션에서는 다음의 작업을 이해하겠습니다. PostgreSQL 시리얼 의사 유형(pseudo-type)을 통해 다음을 정의할 수 있습니다. 자동 증가 열 테이블에. 그리고 우리는 또한 본다 ~의 PostgreSQL 직렬 의사 유형 .

PostgreSQL 직렬 의사 유형이란 무엇입니까?

PostgreSQL에는 다음과 같은 특정 종류의 데이터베이스 개체 생성기가 있습니다. 연속물 , 이는 다음과 같은 데 사용됩니다. 정수 시퀀스 생성 로 자주 사용되는 것 기본 키 테이블에.

시퀀스는 다음의 도움으로 생성될 수 있습니다. SERIAL 의사 유형 , 다음 명령에서 볼 수 있듯이 새 테이블을 만드는 동안:

 CREATE TABLE table_name( ID SERIAL ); 

PostgreSQL은 다음을 제공하는 경우 다음을 수행합니다. SERIAL 의사 유형 ~로 ID 열:

  • 먼저 PostgreSQL은 시퀀스 객체를 생성한 후 시퀀스에 의해 생성된 다음 값을 특정 열의 사전 정의된 값으로 설정합니다.
  • 그 후 PostgreSQL은 NOT NULL 제약조건 ~로 ID 열 시퀀스는 항상 정수를 생성하기 때문에 널이 아닌 값 .
  • 마침내 PostgreSQL은 시퀀스 소유자를 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; 

그만큼 PostgreSQL 직렬 의사 유형 다음과 같은 세 가지 유형으로 분류됩니다.

    소형 직렬 연속물 빅시리즈

우리는 모든 것을 포함하는 다음 테이블을 가지고 있습니다 직렬 의사 유형 PostgreSQL이 지원하는 사양:

이름 저장소 크기 범위
소형 직렬 2바이트 1~32767
연속물 4 바이트 1~2147483647
빅시리즈 8바이트 1~9223372036854775807

PostgreSQL 직렬 의사 유형의 구문

PostgreSQL의 구문 직렬 의사 유형 다음과 같이:

 variable_name SERIAL 

PostgreSQL SERIAL 유형의 예

다양한 예를 통해 어떻게 이해하는지 살펴보겠습니다. PostgreSQL 직렬 의사 유형이 작동합니다. .

참고: SERIAL 유형은 열에 간접적으로 인덱스를 생성하거나 해당 열을 기본 키 열로 만들지 않기 때문에 SERIAL 열에 대해 PRIMARY KEY 제약 조건을 정의할 수 있습니다.

CREATE 명령의 도움말을 사용하여 하나의 새 테이블을 만들고 INSERT 명령을 사용하여 일부 값을 삽입합니다.

아래 예에서는 만들다 생성하는 명령 자동차 테이블에 조직 데이터베이스:

 CREATE TABLE Cars( Car_id SERIAL PRIMARY KEY, Car_name VARCHAR NOT NULL, Car_model VARCHAR NOT NULL ); 

산출

그만큼 자동차 아래 스크린샷과 같이 위 명령을 실행한 후 테이블이 성공적으로 생성되었습니다.

PostgreSQL 시리얼

일단 자동차 테이블이 생성되면 INSERT 명령을 사용하여 일부 값을 삽입할 수 있습니다. 그리고 우리는 기본 INSERT 명령에 키워드를 사용하거나 열 이름을 생략합니다. (자동차 ID) .

 INSERT INTO Cars(Car_name, Car_model) VALUES('Porche','911 Carrera'); 

산출

위 명령을 구현하면 다음 메시지가 표시되고 값이 성공적으로 삽입되었습니다. 자동차 테이블:

PostgreSQL 시리얼

또는 사용하여 기본 키워드 컬럼 이름으로 (자동차_ID):

 INSERT INTO Cars(Car_id, Car_name, Car_model) VALUES(DEFAULT,'Audi','A8'); 

산출

위 명령을 구현하면 다음 메시지가 표시됩니다. 값이 성공적으로 삽입되었습니다. 자동차 테이블:

PostgreSQL 시리얼

위 스크린샷에서 볼 수 있듯이 PostgreSQL은 자동차 테이블이 있는 Car_id 열 값은 1과 2 .

생성하고 삽입한 후 자동차 테이블의 값을 사용하겠습니다. 선택하다 명령은 다음의 모든 행을 반환합니다. 자동차 테이블:

 SELECT * FROM Cars; 

산출

위의 명령을 성공적으로 구현하면 다음과 같은 결과를 얻게 됩니다.

PostgreSQL 시리얼

우리는 pg_get_serial_sequence() 시퀀스 이름을 가져오는 함수 연속물 아래 구문에서 볼 수 있듯이 지정된 테이블의 열:

 pg_get_serial_sequence('table_name','column_name') 

얻으려면 현재 가치 시퀀스에 의해 생성된 경우 시퀀스 이름을 currval() 함수에 전달할 수 있습니다.

다음 예에서는 커발() 현재 생성된 값을 반환하는 함수 자동차 테이블 Car_id_seq 물체:

 SELECT currval(pg_get_serial_sequence('Cars', 'car_id')); 

산출

위 명령을 구현하면 다음과 같은 결과가 출력됩니다.

PostgreSQL 시리얼

우리는 반납 중 Car_id 테이블에 새 행을 삽입할 때 시퀀스에 의해 생성된 값을 가져오려면 INSERT 명령에 절을 추가합니다.

아래 명령은 새 행을 삽입하는 데 사용됩니다. 자동차 테이블에 대해 생성된 레코드를 반환합니다. Car_id 열.

array.from 자바
 INSERT INTO Cars(Car_name,Car_model) VALUES('Jaguar', 'XK') RETURNING Car_id; 

산출

위의 명령을 실행하면 다음과 같은 출력이 표시됩니다. Car_id ~처럼 :

PostgreSQL 시리얼

메모:

  • 위에서 이해했듯이, 시퀀스 생성기 작업은 트랜잭션에 안전하지 않습니다. 이는 각 사용자가 다른 가치를 얻게 됨을 의미합니다. 두 개의 병렬 데이터베이스인 경우 연결은 시퀀스에서 다음 값을 얻으려고 시도합니다.
  • 그리고 해당 사용자의 시퀀스 번호는 유휴 상태가 되며 다음과 같은 경우 시퀀스에 공백이 생성됩니다. 한 명의 사용자가 트랜잭션을 롤백할 수 있습니다. .

실시예2

한 가지 예를 더 살펴보겠습니다. 직렬 의사 유형 상세히.

그래서 우리는 또 다른 새로운 테이블을 만들 것입니다. 채소 CREATE 명령을 사용하여 비슷한 테이블로 데이터 베이스 그건 조직 와 더불어 Veg_id연속물 의사형.

 CREATE TABLE Vegetables( Veggie_id SERIAL PRIMARY KEY, Veggie_name VARCHAR NOT NULL, Veggie_seasons VARCHAR NOT NULL ); 

산출

그만큼 채소 아래 스크린샷과 같이 위 명령을 실행한 후 테이블이 성공적으로 생성되었습니다.

PostgreSQL 시리얼

일단 채소 테이블이 생성되면 INSERT 명령을 사용하여 일부 값을 삽입하고 채소_ID 아래 명령에 표시된 대로 열:

 INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Broccoli','Spring'); 

산출

위 명령을 구현하면 다음과 같은 메시지가 표시됩니다. 값이 성공적으로 삽입되었습니다. 채소 테이블.

PostgreSQL 시리얼

또는 다음을 사용할 수도 있습니다. 기본 키워드를 사용하고 Veggie_id 다음 명령에 표시된 대로 열:

 INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter'); 

산출

위의 명령을 실행하면 아래 메시지가 표시됩니다. 기본 키워드 아니면 그 열 이름을 무시하십시오 , 우리는 비슷한 결과를 얻을 것입니다:

PostgreSQL 시리얼

따라서 우리는 자동차 다음 명령을 수행하면 테이블이 표시됩니다.

 INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Jalapeno Peppers','Fall'), ('Cucumbers','Summer'), ('Winter Squash','Winter'), ('Snow Peas','Spring'), ('Black Radish','All seasons'), ('Pumpkin','Fall'); 

산출

위의 명령을 실행하면 아래 메시지가 표시됩니다. 이는 값이 성공적으로 삽입되었음을 표시합니다. 채소 테이블.

PostgreSQL 시리얼

생성하고 삽입한 후 채소 테이블의 값을 사용하겠습니다. 선택하다 모든 행을 반환하는 명령 채소 테이블:

 SELECT * FROM Vegetables; 

산출

위 명령을 성공적으로 구현하면 다음과 같은 결과가 출력됩니다.

PostgreSQL 시리얼

개요

에서 PostgreSQL 직렬 의사 유형 섹션에서 우리는 직렬 의사 유형 기능을 배웠습니다. 이는 주로 다음을 생성하는 데 사용됩니다. 자동 증가 특정 테이블의 열 값입니다.