토토 캔 유형은 2바이트, 4바이트 및 8바이트 정수로 구성됩니다. 4바이트 및 8바이트 부동 소수점 토토 캔 선택 가능한 정밀도 소수점.표 8-2사용 가능한 유형을 나열합니다.
표 8-2. 토토 캔 유형
| 이름 | 저장소 크기 | 설명 | 범위 |
|---|---|---|---|
| 작은int | 2바이트 | 작은 범위의 정수 | -32768 ~ +32767 |
| 정수 | 4바이트 | 정수에 대한 일반적인 선택 | -2147483648 ~ +2147483647 |
| 비긴트 | 8바이트 | 대규모 정수 | -9223372036854775808 ~ 9223372036854775807 |
| 십진수 | 변수 | 사용자 지정 정밀도, 정확함 | 제한 없음 |
| 토토 캔 | 변수 | 사용자 지정 정밀도, 정확함 | 제한 없음 |
| 진짜 | 4바이트 | 변수-정밀도, 부정확 | 십진수 6자리 정밀도 |
| 배정밀도 | 8바이트 | 가변-정밀도, 부정확 | 십진수 15자리 정밀도 |
| 연재 | 4바이트 | 자동 증가하는 정수 | 1~2147483647 |
| 큰 직렬 | 8바이트 | 큰 자동 증가 정수 | 1 ~ 9223372036854775807 |
토토 캔 유형에 대한 상수 구문은 다음에 설명되어 있습니다.섹션 4.1.2. 토토 캔 유형에는 해당하는 전체 세트가 있습니다. 산술 연산자 및 함수. 참조제9장12321_12400
유형smallint, 정수및비긴트저장 정수, 즉 분수 성분이 없는 토토 캔, 다양한 범위의. 외부에 값을 저장하려고 시도함 허용 범위로 인해 오류가 발생합니다.
유형정수일반적인 선택입니다. 범위, 저장 크기 및 성능.smallint유형은 다음과 같습니다. 일반적으로 디스크 공간이 부족한 경우에만 사용됩니다.비긴트유형은 다음과 같은 경우에만 사용해야 합니다.정수범위가 부족합니다. 왜냐하면 후자가 확실히 더 빠릅니다.
매우 최소한의 운영 체제에서는bigint유형이 올바르게 작동하지 않을 수 있습니다. 왜냐하면 8바이트 정수에 대한 컴파일러 지원에 의존합니다. 그런 기계,비긴트다음과 동일하게 작동합니다정수, 하지만 여전히 8바이트를 차지합니다. 저장의. (우리는 이것이 가능한 최신 플랫폼을 알지 못합니다. 그렇습니다.)
SQL만 지정합니다 정수 유형정수(또는int), smallint및비긴트. 유형 이름int2, int4및int8확장 기능은 일부에서 사용되기도 합니다. 기타SQL데이터베이스 시스템.
유형토토 캔번호를 저장할 수 있음 최대 1000자리의 정밀도로 계산을 수행합니다. 정확히. 특히 화폐 보관에 추천합니다 정확성이 요구되는 금액 및 기타 수량. 그러나 산술에 대해서는토토 캔값은 정수 유형에 비해 매우 느립니다. 다음 섹션에 설명된 부동 소수점 유형입니다.
우리는 아래에서 다음 용어를 사용합니다:규모의토토 캔이것은 오른쪽에 있는 분수 부분의 소수 자릿수 개수 소수점.정밀도의토토 캔중요한 총 개수입니다. 정수의 자릿수, 즉 토토 캔의 개수 소수점 양쪽. 따라서 토토 캔 23.5141에는 정밀도는 6이고 소수 자릿수는 4입니다. 정수는 다음과 같이 간주될 수 있습니다. 0의 척도를 갖습니다.
a의 최대 정밀도와 최대 규모 모두토토 캔열을 구성할 수 있습니다. 받는 사람 유형의 열 선언토토 캔사용 구문:
토토 캔(정밀도, 규모)
정밀도는 양수여야 하며, 배율은 0 또는 양수여야 합니다. 또는:
토토 캔(정밀도)
크기 0을 선택합니다. 지정:
토토 캔
정밀도나 배율 없이 다음과 같은 열을 생성합니다. 모든 정밀도 및 배율의 토토 캔 값을 최대 1개까지 저장할 수 있습니다. 정밀도에 대한 구현 한계. 이런 종류의 칼럼 입력 값을 특정 규모로 강제하지 않지만토토 캔선언된 규모가 있는 열 입력 값을 해당 규모로 강제합니다. (그만큼SQL표준에는 기본 배율 0이 필요합니다. 즉, 정수 정밀도로 강제 변환됩니다. 우리는 이것을 조금 발견합니다. 쓸모없다. 이식성이 염려된다면 항상 다음을 지정하십시오. 정밀도와 배율을 명시적으로 지정합니다.)
저장할 값의 규모가 열의 규모가 선언되면 시스템은 값을 반올림합니다. 지정된 소수 자릿수까지. 그런 다음, 소수점 왼쪽 자릿수가 해당 토토 캔를 초과합니다. 선언된 정밀도에서 선언된 스케일을 뺀 경우 오류는 다음과 같습니다. 제기되었습니다.
토토 캔 값은 추가 작업 없이 물리적으로 저장됩니다. 선행 또는 후행 0. 따라서 선언된 정밀도와 열의 규모는 고정 할당이 아니라 최대값입니다. (이에 감지하다토토 캔유형이 다음과 더 유사함varchar(n)보다문자(n).) 실제 저장 요구 사항은 4개 그룹당 2바이트입니다. 10진수, 5~8바이트 오버헤드.
일반 토토 캔 값 외에도토토 캔유형은 특수 값을 허용합니다NaN, 의미"토토 캔가 아님". 모든 작업NaN다른 결과 생성NaN. 이 값을 SQL 명령의 상수로 쓰면 예를 들어, 주위에 따옴표를 넣어야 합니다.UPDATE 테이블 SET x = 'NaN'. 입력 시 문자열NaN다음에서 인식됩니다. 대소문자를 구분하지 않습니다.
참고:대부분의 구현에서"토토 캔가 아님"개념,NaN다른 것과 동일하지 않은 것으로 간주됩니다. 토토 캔 값(포함NaN). 에서 허용 명령토토 캔값이 트리 기반 인덱스에서 정렬 및 사용됩니다.PostgreSQL대접NaN값은 같고 모든 것보다 큽니다. 비-NaN값.
유형십진수그리고토토 캔동등합니다. 두 유형 모두 다음의 일부입니다.SQL표준.
데이터 유형진짜그리고배정밀도부정확, 가변 정밀도 토토 캔 유형. 실제로 이러한 유형은 일반적으로 구현IEEE이진 부동 소수점 연산을 위한 표준 754(단일 및 각각 배정밀도) 기본 프로세서, 운영 체제 및 컴파일러 지원 그것.
정확하지 않음은 일부 값을 정확하게 변환할 수 없음을 의미합니다. 내부 형식으로 변환되어 근사값으로 저장되므로 값을 저장하고 검색하는 것이 약간 보일 수 있습니다. 불일치. 오류 관리 및 전파 방법 계산을 통해 전체 지점의 주제입니다. 수학과 컴퓨터 과학은 논의되지 않습니다. 여기에서는 다음 사항을 제외하고:
정확한 저장 및 계산이 필요한 경우(예: 금액의 경우), 다음을 사용하세요.토토 캔대신 입력하세요.
이것들로 복잡한 계산을 하고 싶다면 특히 당신이 의존하는 경우 중요한 것의 유형 경계 경우(무한대, 언더플로)의 특정 동작 구현을 주의 깊게 평가해야 합니다.
두 개의 부동 소수점 값이 동일한지 비교하면 항상 예상대로 작동하지는 않습니다.
대부분의 플랫폼에서,진짜유형에는 범위는 최소 1E-37 ~ 1E+37이고 정밀도는 최소 6입니다. 십진수.배정밀도유형 일반적으로 범위는 약 1E-307에서 1E+308입니다. 최소 15자리의 정밀도. 값이 너무 크거나 너무 작으면 오류가 발생합니다. 다음과 같은 경우 반올림이 발생할 수 있습니다. 입력 토토 캔의 정밀도가 너무 높습니다. 토토 캔가 너무 가깝습니다. 0과 구별되는 것으로 표현할 수 없는 0은 언더플로 오류가 발생합니다.
참고:그extra_float_digits설정은 추가 유효 자릿수를 제어합니다. 부동 소수점 값이 텍스트로 변환될 때 포함됩니다. 출력용. 기본값은0, 출력은 모든 플랫폼에서 동일합니다. PostgreSQL에서 지원됩니다. 늘리면 출력이 나옵니다. 저장된 값을 더 정확하게 표현하지만 휴대가 불가능하다.
일반 토토 캔 값 외에도 부동 소수점 유형에는 몇 가지 특수 값이 있습니다.
무한대
-무한대
NaN
참고:IEEE754는 이를 명시합니다NaN다른 어떤 것과도 비교하면 안 됩니다 부동 소수점 값(포함NaN). 부동 소수점을 허용하려면 트리 기반 인덱스에서 정렬되고 사용되는 값,PostgreSQL대접NaN값은 같거나 그 이상 모든 비-보다NaN값.
포스트그레SQL또한 지원합니다 SQL 표준 표기법플로트그리고부동(p)부정확한 토토 캔 유형을 지정하는 데 사용됩니다. 여기,p허용 가능한 최소값을 지정합니다. 정밀도바이너리토토 캔.PostgreSQL수락플로트(1)에플로트(24)다음 선택으로실제입력, 동안플로트(25)에플로트(53)선택더블 정밀도. 의 값p허용된 범위를 벗어나면 오류가 발생합니다.플로트정밀도가 지정되지 않은 것은 의미가 있습니다배정밀도.
참고:이전포스트그레SQL7.4, 정밀도부동(p)너무 많다는 뜻으로 받아들여졌습니다십진수토토 캔. 이는 SQL 표준과 일치하도록 수정되었습니다. 정밀도가 이진수로 측정되도록 지정합니다. 가정은진짜그리고배정밀도정확히 24개이고 가수의 53비트는 각각 정확합니다. IEEE 표준 부동 소수점 구현. IEEE가 아닌 경우 플랫폼에서는 약간 다를 수 있지만 단순화를 위해 동일한 범위p사용됩니다 모든 플랫폼에서.
데이터 유형연재그리고큰 직렬은 실제 유형이 아니지만 단지 고유 식별자 열 생성을 위한 표기 편의성 (와 유사AUTO_INCREMENT다른 데이터베이스에서 지원되는 속성). 현재 구현, 지정:
테이블 생성테이블 이름 (
열이름연속
);
다음을 지정하는 것과 동일합니다.
시퀀스 생성테이블 이름_열이름_seq;
테이블 만들기테이블 이름 (
열이름정수가 NULL이 아님 DEFAULT nextval('테이블 이름_열이름_seq')
);
시퀀스 변경테이블 이름_열이름_seq 소유자테이블 이름.열이름;
따라서 우리는 정수 열을 생성하고 그 열을 정렬했습니다. 시퀀스 생성기에서 할당할 기본값입니다. 갑NULL이 아님제약조건이 다음에 적용됩니다. Null 값을 삽입할 수 없는지 확인하십시오. (대부분의 경우 당신은 또한 a를 첨부하고 싶을 것입니다.고유또는기본 키방지 제약 실수로 중복된 값이 삽입되는 경우가 있지만 이는 자동이 아닙니다.) 마지막으로 시퀀스는 다음과 같이 표시됩니다."소유자"열이 됩니다. 열이나 테이블이 삭제되면 삭제됩니다.
참고:이전PostgreSQL 7.3, 연재묵시적고유. 이것은 더 이상 자동이 아닙니다. 직렬 컬럼을 원할 경우 고유 제약 조건이 있거나 기본 키여야 합니다. 이제 다른 데이터 유형과 마찬가지로 지정되어야 합니다.
다음 시퀀스 값을 삽입하려면연재열, 다음을 지정하십시오.연재열에는 기본값이 할당되어야 합니다. 이는 목록에서 해당 열을 제외하여 수행할 수 있습니다. 의 열 수삽입문장 또는 를 사용하여기본값키 단어.
유형 이름연재그리고연재4동등함: 둘 다 생성정수열. 유형 이름큰 직렬그리고연속8일 같은 방식으로 생성한다는 점만 제외하면비긴트열.큰 직렬다음 이상의 사용이 예상되는 경우 사용해야 합니다. 231테이블 수명 동안의 식별자.
다음을 위해 생성된 시퀀스연재소유 열이 다음과 같을 때 열은 자동으로 삭제됩니다. 떨어졌다. 열을 삭제하지 않고 시퀀스를 삭제할 수 있습니다. 하지만 이렇게 하면 열 기본값이 강제로 제거됩니다. 표현.