이 섹션에서는 다음의 작업을 이해하겠습니다. 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 );
산출
그만큼 자동차 아래 스크린샷과 같이 위 명령을 실행한 후 테이블이 성공적으로 생성되었습니다.
일단 자동차 테이블이 생성되면 INSERT 명령을 사용하여 일부 값을 삽입할 수 있습니다. 그리고 우리는 기본 INSERT 명령에 키워드를 사용하거나 열 이름을 생략합니다. (자동차 ID) .
INSERT INTO Cars(Car_name, Car_model) VALUES('Porche','911 Carrera');
산출
위 명령을 구현하면 다음 메시지가 표시되고 값이 성공적으로 삽입되었습니다. 자동차 테이블:
또는 사용하여 기본 키워드 컬럼 이름으로 (자동차_ID):
INSERT INTO Cars(Car_id, Car_name, Car_model) VALUES(DEFAULT,'Audi','A8');
산출
위 명령을 구현하면 다음 메시지가 표시됩니다. 값이 성공적으로 삽입되었습니다. 자동차 테이블:
위 스크린샷에서 볼 수 있듯이 PostgreSQL은 자동차 테이블이 있는 Car_id 열 값은 1과 2 .
생성하고 삽입한 후 자동차 테이블의 값을 사용하겠습니다. 선택하다 명령은 다음의 모든 행을 반환합니다. 자동차 테이블:
SELECT * FROM Cars;
산출
위의 명령을 성공적으로 구현하면 다음과 같은 결과를 얻게 됩니다.
우리는 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'));
산출
위 명령을 구현하면 다음과 같은 결과가 출력됩니다.
우리는 반납 중 Car_id 테이블에 새 행을 삽입할 때 시퀀스에 의해 생성된 값을 가져오려면 INSERT 명령에 절을 추가합니다.
아래 명령은 새 행을 삽입하는 데 사용됩니다. 자동차 테이블에 대해 생성된 레코드를 반환합니다. Car_id 열.
array.from 자바
INSERT INTO Cars(Car_name,Car_model) VALUES('Jaguar', 'XK') RETURNING Car_id;
산출
위의 명령을 실행하면 다음과 같은 출력이 표시됩니다. Car_id ~처럼 삼 :
메모:
- 위에서 이해했듯이, 시퀀스 생성기 작업은 트랜잭션에 안전하지 않습니다. 이는 각 사용자가 다른 가치를 얻게 됨을 의미합니다. 두 개의 병렬 데이터베이스인 경우 연결은 시퀀스에서 다음 값을 얻으려고 시도합니다.
- 그리고 해당 사용자의 시퀀스 번호는 유휴 상태가 되며 다음과 같은 경우 시퀀스에 공백이 생성됩니다. 한 명의 사용자가 트랜잭션을 롤백할 수 있습니다. .
실시예2
한 가지 예를 더 살펴보겠습니다. 직렬 의사 유형 상세히.
그래서 우리는 또 다른 새로운 테이블을 만들 것입니다. 채소 CREATE 명령을 사용하여 비슷한 테이블로 데이터 베이스 그건 조직 와 더불어 Veg_id 열 연속물 의사형.
CREATE TABLE Vegetables( Veggie_id SERIAL PRIMARY KEY, Veggie_name VARCHAR NOT NULL, Veggie_seasons VARCHAR NOT NULL );
산출
그만큼 채소 아래 스크린샷과 같이 위 명령을 실행한 후 테이블이 성공적으로 생성되었습니다.
일단 채소 테이블이 생성되면 INSERT 명령을 사용하여 일부 값을 삽입하고 채소_ID 아래 명령에 표시된 대로 열:
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Broccoli','Spring');
산출
위 명령을 구현하면 다음과 같은 메시지가 표시됩니다. 값이 성공적으로 삽입되었습니다. 채소 테이블.
또는 다음을 사용할 수도 있습니다. 기본 키워드를 사용하고 Veggie_id 다음 명령에 표시된 대로 열:
INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter');
산출
위의 명령을 실행하면 아래 메시지가 표시됩니다. 기본 키워드 아니면 그 열 이름을 무시하십시오 , 우리는 비슷한 결과를 얻을 것입니다:
따라서 우리는 자동차 다음 명령을 수행하면 테이블이 표시됩니다.
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');
산출
위의 명령을 실행하면 아래 메시지가 표시됩니다. 이는 값이 성공적으로 삽입되었음을 표시합니다. 채소 테이블.
생성하고 삽입한 후 채소 테이블의 값을 사용하겠습니다. 선택하다 모든 행을 반환하는 명령 채소 테이블:
SELECT * FROM Vegetables;
산출
위 명령을 성공적으로 구현하면 다음과 같은 결과가 출력됩니다.
개요
에서 PostgreSQL 직렬 의사 유형 섹션에서 우리는 직렬 의사 유형 기능을 배웠습니다. 이는 주로 다음을 생성하는 데 사용됩니다. 자동 증가 특정 테이블의 열 값입니다.