데이터 유형은 표에 저장할 수있는 데이터의 종류를 제한하는 방법입니다. 그러나 많은 응용 분야에서 그들이 제공하는 스포츠 토토 베트맨 조건이 너무 거칠다.
이를 위해 SQL을 사용하면 열과 테이블의 스포츠 토토 베트맨 조건을 정의 할 수 있습니다. 스포츠 토토 베트맨 조건은 원하는만큼 테이블의 데이터를 많이 제어 할 수 있습니다.
점검 스포츠 토토 베트맨 조건이 가장 일반적인 스포츠 토토 베트맨 조건 유형입니다. 특정 열의 값이 부울 (진실 값) 표현식을 충족해야 함을 지정할 수 있습니다.
테이블 제품 생성 (점검 (가격> 0)
);
보시다시피, 구속 조건 정의는 기본값 정의와 마찬가지로 데이터 유형에 따라옵니다. 기본값 및 스포츠 토토 베트맨 조건은 순서대로 나열 될 수 있습니다.check
괄호 안의 표현식이 뒤 따릅니다. 체크 스포츠 토토 베트맨 조건 표현식은 따라서 제한된 열을 포함해야합니다. 그렇지 않으면 스포츠 토토 베트맨 조건이 너무 의미가 없습니다.
스포츠 토토 베트맨 조건에 별도의 이름을 줄 수도 있습니다. 오류 메시지를 명확히하고 오류 메시지를 변경해야 할 때 스포츠 토토 베트맨 조건을 참조 할 수 있습니다.
테이블 제품 생성 (스포츠 토토 베트맨 긍정적 _price점검 (가격> 0)
따라서 이름이 지정된 스포츠 토토 베트맨 조건을 지정하려면 키워드를 사용하십시오스포츠 토토 베트맨 조건
다음에 식별자가 뒤 따른 다음 스포츠 토토 베트맨 조건 정의가 이어집니다. (이런 식으로 제약 이름을 지정하지 않으면 시스템이 이름을 선택합니다.)
검사 스포츠 토토 베트맨 조건은 여러 열을 참조 할 수도 있습니다. 일반 가격과 할인 된 가격을 저장하면 할인 된 가격이 일반 가격보다 낮은 지 확인하고 싶다고 가정 해 봅시다..
테이블 제품 생성 (check (가격> 할인 _price)
);
처음 두 가지 스포츠 토토 베트맨 조건은 익숙해 보일 것입니다. 세 번째는 새로운 구문을 사용합니다.
우리는 첫 번째 두 가지 스포츠 토토 베트맨 조건이 열 제약 인 반면, 세 번째 제약은 하나의 열 정의와 별도로 기록되기 때문에 테이블 스포츠 토토 베트맨 조건입니다. 열 스포츠 토토 베트맨 조건은 테이블 스포츠 토토 베트맨 조건으로 서면으로 작성될 수 있지만, 컬럼 제한 조건은 첨부 된 열만 참조해야하기 때문에 반대는 반드시 가능하지는 않습니다.postgresql해당 규칙을 시행하지는 않지만 테이블 정의가 다른 데이터베이스 시스템과 작동하도록하려면 따라야합니다. 위의 예는 다음과 같이 쓸 수 있습니다..
테이블 제품 생성 (
또는 심지어 :
테이블 제품 생성 (
맛의 문제입니다.
열 제약과 같은 방식으로 이름을 테이블 스포츠 토토 베트맨 조건에 할당 할 수 있습니다 :
테이블 제품 생성 (스포츠 토토 베트맨 조건 valid_discount점검 (가격> 할인 _price)
점검 표현식이 True 또는 Null 값으로 평가되면 점검 스포츠 토토 베트맨이 충족된다는 점에 유의해야합니다. 피연산자가 널 인 경우 대부분의 표현식은 널 값으로 평가되므로 제한된 열에서 널 값을 방지하지 않습니다.
postgresql지원하지 않음check
확인중인 새 또는 업데이트 된 행 이외의 다른 행을 참조하는 스포츠 토토 베트맨 조건. acheck
이 규칙을 위반하는 제약은 간단한 테스트에서 작동하는 것으로 보일 수 있습니다. 데이터베이스가 스포츠 토토 베트맨 조건이 거짓이되는 상태에 도달하지 않음을 보장 할 수는 없습니다 (관련 다른 행의 후속 변경으로 인해). 이로 인해 데이터베이스 덤프가 발생하고 복원이 실패합니다.고유 한
, 제외
또는외국 키
교차 행 및 크로스 테이블 제한을 표현하기위한 스포츠 토토 베트맨 조건.
당신이 원하는 것이 지속적으로 유지 된 일관성 보증이 아니라 행 삽입시 다른 행에 대한 일회성 검사라면토토 커뮤니티 : 문서 : 12 : 38 장. 트리거이를 구현하는 데 사용될 수 있습니다. (이 접근법은 덤프/복원 문제를 피하기 때문에pg_dump데이터를 복원 한 후까지 트리거를 다시 설치하지 않으므로 덤프/복원 중에 수표가 시행되지 않도록합니다.)
postgresqlcheck
스포츠 토토 베트맨 조건은 불변입니다. 즉, 동일한 입력 행에 대해 항상 동일한 결과를 제공합니다. 이 가정은 검사를 정당화하는 것입니다check
줄이 삽입되거나 업데이트 된 경우에만 스포츠 토토 베트맨 조건이 아닙니다. (다른 테이블 데이터를 참조하지 않는 것에 대한 위의 경고는 실제로이 제한의 특별한 경우입니다.)
이 가정을 위반하는 일반적인 방법의 예는 사용자 정의 된 함수를 a에 참조하는 것입니다.check
표현식, 그 기능의 동작을 변경합니다.postgresql이를 허용하지는 않지만 테이블에 행이있는 경우에는 눈치 채지 못할 것입니다.check
스포츠 토토 베트맨. 이렇게하면 후속 데이터베이스 덤프가 발생하고 복원이 실패합니다.Alter Table
), 함수 정의를 조정하고 스포츠 토토 베트맨 조건을 다시 구분하여 모든 테이블 행에 대해 다시 확인합니다.
NOL NULL 스포츠 토토 베트맨 조건은 단순히 열이 널 값을 가정해서는 안된다는 것을 지정합니다. 구문 예 :
테이블 제품 생성 (NOT NULL,NOT NULL,
NOL NULL 스포츠 토토 베트맨 조건은 항상 열 스포츠 토토 베트맨 조건으로 작성됩니다. 무감각 한 스포츠 토토 베트맨 조건은 기능적으로 확인 스포츠 토토 베트맨 조건을 생성하는 것과 동일합니다check (
하지만postgresql명시 적이 아닌 구속 조건을 만드는 것이 더 효율적입니다. 단점은 이런 식으로 생성되지 않은 구속 조건에 명시적인 이름을 줄 수 없다는 것입니다.column_name
물론 열에는 둘 이상의 스포츠 토토 베트맨 조건을 가질 수 있습니다. 스포츠 토토 베트맨 조건을 차례로 작성하십시오 :
테이블 제품 생성 (
주문은 중요하지 않습니다. 스포츠 토토 베트맨 조건을 확인하는 순서가 반드시 결정되는 것은 아닙니다.
theNOT NULL
스포츠 토토 베트맨 조건이 있습니다 :NULL
스포츠 토토 베트맨. 그렇다고 열이 널이어야한다는 것을 의미하지는 않습니다.NULL
SQL 표준에는 스포츠 토토 베트맨이 없으며 휴대용 응용 프로그램에 사용해서는 안됩니다. (에만 추가되었습니다postgresql다른 데이터베이스 시스템과 호환됩니다.) 그러나 일부 사용자는 스크립트 파일에서 스포츠 토토 베트맨 조건을 쉽게 전환 할 수 있기 때문에 좋아합니다. 예를 들어 :부터 시작할 수 있습니다.
테이블 제품 생성 (
그런 다음not
원하는 곳.
대부분의 데이터베이스 설계에서 대부분의 열은 널 표시되지 않아야합니다.
고유 한 스포츠 토토 베트맨 조건은 열 또는 열 그룹에 포함 된 데이터가 테이블의 모든 행에서 고유한지 확인합니다. 구문은 다음과 같습니다.
테이블 제품 생성 (고유 한,
열 스포츠 토토 베트맨 조건으로 작성 될 때 :
테이블 제품 생성 (고유 (Product_No)
);
테이블 스포츠 토토 베트맨으로 작성 될 때.
열 그룹에 대한 고유 한 스포츠 토토 베트맨 조건을 정의하려면 쉼표로 분리 된 열 이름을 가진 테이블 스포츠 토토 베트맨 조건으로 작성하십시오.
테이블 작성 예제 (고유 (A, C)
);
이것은 표시된 열의 값의 조합이 전체 테이블에서 독특하다는 것을 지정하지만, 열 중 하나는 고유 할 필요는 없으며 (일반적으로 포함되지 않음)..
일반적인 방법으로 고유 한 스포츠 토토 베트맨 조건에 대해 자신의 이름을 할당 할 수 있습니다.
테이블 제품 생성 (스포츠 토토 베트맨 조건 Must_be_different고유 한,
고유 한 스포츠 토토 베트맨 조건을 추가하면 스포츠 토토 베트맨 조건에 나열된 열 또는 열 그룹에 고유 한 B- 트리 색인이 자동으로 생성됩니다. 일부 행만 포괄하는 독창성 제한은 고유 한 제약으로 작성 될 수 없지만 고유 한 제한을 만들어 그러한 제한을 시행 할 수 있습니다부분 색인.
일반적으로 스포츠 토토 베트맨 조건에 포함 된 모든 열의 값이 동일 인 테이블에 하나 이상의 행이 있으면 고유 한 스포츠 토토 베트맨 조건이 위반됩니다. 그러나이 비교에서는 두 가지 널 값이 동일하게 간주되지 않습니다.
기본 키 스포츠 토토 베트맨 조건은 열 또는 열 그룹이 테이블의 행에 고유 식별자로 사용할 수 있음을 나타냅니다. 이를 위해서는 값이 독특하고 무효가되지 않아야합니다.
테이블 제품 생성 (
테이블 제품 생성 (기본 키,
기본 키는 둘 이상의 열에 걸쳐있을 수 있습니다. 구문은 고유 한 제약과 유사합니다.
테이블 작성 예제 (기본 키 (A, C)
);
기본 키를 추가하면 기본 키에 나열된 열 또는 열의 열에 고유 한 B- 트리 색인이 자동으로 생성되며 열을 표시하도록 강요NOT NULL
.
테이블에는 최대 하나의 기본 키가있을 수 있습니다. (기능적으로 거의 동일한 것을 특징으로하는 고유하고 무자비한 제약이있을 수 있지만, 단 하나만 기본 키로 식별 할 수 있습니다.) 관계형 데이터베이스 이론은 모든 테이블에 기본 키가 있어야한다고 지시합니다.postgresql, 그러나 일반적으로 그것을 따르는 것이 가장 좋습니다.
기본 키는 문서 목적 및 클라이언트 응용 프로그램 모두에 유용합니다. 예를 들어, 행 값을 수정할 수있는 GUI 응용 프로그램은 행을 고유하게 식별 할 수 있도록 테이블의 기본 키를 알아야 할 것입니다.
외국 키 스포츠 토토 베트맨 조건은 열 (또는 열 그룹)의 값이 다른 테이블의 일부 행에 나타나는 값과 일치해야 함을 지정합니다. 우리는 이것이를 유지한다고 말합니다.참조 무결성두 관련 테이블 사이.
우리가 이미 여러 번 사용한 제품 테이블이 있다고 말합니다 :
테이블 제품 생성 (
해당 제품의 주문을 저장하는 테이블이 있다고 가정 해 봅시다. 주문 테이블에 실제로 존재하는 제품의 주문 만 포함되어 있는지 확인하고 싶습니다.
테이블 주문 생성 (참조 제품 (Product_No),
이제 비 널로 주문을 만들 수 없습니다product_no
제품 테이블에 나타나지 않는 항목.
우리는이 상황에서 주문 테이블이라고 말합니다.참조테이블 및 제품 테이블은입니다.참조테이블. 마찬가지로 참조 및 참조 열이 있습니다.
위 명령을 다음과 같이 단축 할 수도 있습니다.
테이블 주문 생성 (참조 제품,
열 목록이 없기 때문에 참조 테이블의 기본 키는 참조 열로 사용됩니다..
일반적인 방식으로 외국 키 스포츠 토토 베트맨 조건에 대한 자신의 이름을 할당 할 수 있습니다.
외국 키는 열을 제한하고 참조 할 수 있습니다. 평소와 같이 테이블 스포츠 토토 베트맨 조건 양식으로 작성해야합니다.
테이블 생성 t1 (외국 키 (B, C) 참조 기타 _table (C1, C2)
);
물론 제한된 열의 수와 유형은 참조 열의 숫자와 유형과 일치해야합니다.
때로는에 유용합니다“기타 테이블”동일한 테이블이 될 외국 키 제약; 이것을 A라고합니다.자기 참조외국 키. 예를 들어, 테이블의 행을 트리 구조의 노드를 나타내는 경우 쓸 수 있습니다
테이블 트리 생성 (
최상위 노드에 null이 있습니다parent_id
그러나 널 비parent_id
항목은 테이블의 유효한 행을 참조하도록 제한됩니다.
테이블은 둘 이상의 외국 키 스포츠 토토 베트맨 조건을 가질 수 있습니다. 이것은 테이블 사이의 다수의 관계를 구현하는 데 사용됩니다.
테이블 제품 생성 (
기본 키가 마지막 테이블의 외래 키와 겹치는 것을 주목하십시오.
우리는 외국 키가 어떤 제품과 관련이없는 명령을 만들지 않는다는 것을 알고 있습니다. 그러나 주문을 작성한 후 제품이 제거되면 어떻게해야합니까?
참조 된 제품 삭제 허용
주문 삭제
다른 것?
이를 설명하려면 위의 다수의 관계 예에 대한 다음 정책을 구현합시다.order_items
), 우리는 그것을 허용하지 않습니다. 누군가 주문을 제거하면 주문 항목도 제거됩니다.
테이블 제품 생성 (ON DELETE 제한,ON DELETE CASCADE,
제한 및 계단식 삭제 삭제는 가장 일반적인 두 가지 옵션입니다.제한
참조 행의 삭제를 방지합니다.행동 없음
스포츠 토토 베트맨 조건을 확인할 때 참조 행이 여전히 존재하는 경우 오류가 발생 함을 의미합니다. 아무것도 지정하지 않으면 기본 동작입니다.행동 없음
거래 후반까지 수표를 연기 할 수 있습니다.제한
그렇지 않습니다.)캐스케이드
참조 행이 삭제되면 참조를 참조하는 행을 자동으로 삭제해야합니다. 다른 두 가지 옵션이 있습니다.SET NULL
and기본값 설정
. 이로 인해 참조 행의 참조 열이 참조 행이 삭제 될 때 각각 참조 행 (들)의 널로 설정되거나 기본값으로 설정됩니다.기본값 설정
그러나 기본값은 외래 키 스포츠 토토 베트맨 조건을 충족시키지 않으면 작업이 실패합니다.
유사성ON DELETE
또한on Update
참조 열이 변경 될 때 (업데이트)로 호출됩니다. 가능한 행동은 동일합니다.캐스케이드
참조 열의 업데이트 된 값이 참조 행에 복사되어야 함을 의미합니다..
일반적으로, 참조 열은 참조 열이 무인 상태 인 경우 외국의 키 스포츠 토토 베트맨 조건을 충족시킬 필요가 없습니다. 만약에전체 일치
외국 키 선언에 추가됩니다. 참조 열이 모든 참조 열이 널 인 경우에만 스포츠 토토 베트맨 조건을 만족시키는 참조 행에 빠져 나옵니다 (따라서 NULL과 NULL 값의 혼합이 실패 할 수 있도록 보장됩니다전체 일치
스포츠 토토 베트맨 조건). 외국의 주요 스포츠 토토 베트맨 조건을 만족시키지 않도록 행을 참조하는 것을 원하지 않으면 참조 열을로 선언하십시오.NOT NULL
.
외국 키는 기본 키이거나 고유 한 스포츠 토토 베트맨 조건을 형성하거나 비평가 고유 인덱스의 열인 열을 참조해야합니다. 이는 참조 된 열에 항상 참조 행에 일치하는지 여부에 대한 효율적인 조회를 허용하는 인덱스가 있음을 의미합니다.삭제
참조 테이블 또는 an의 행의 행업데이트
참조 열의 참조 테이블을 기존 값과 일치하는 행에 대한 참조 테이블을 스캔해야하므로 참조 열을 색인화하는 것이 좋습니다. 이것이 항상 필요한 것은 아니며 색인하는 방법에 대한 많은 선택이 있기 때문에, 외국 키 스포츠 토토 베트맨 조건의 선언이 참조 열에서 인덱스를 자동으로 생성하지는 않습니다..
데이터 업데이트 및 삭제에 대한 자세한 정보는롤 토토 : 문서 : 12 : 6 장 데이터 조작. 또한 참조 문서의 외국 키 스포츠 토토 베트맨 조건 구문에 대한 설명을 참조하십시오.테이블 만들기.
제외 스포츠 토토 베트맨 조건은 지정된 연산자를 사용하여 지정된 열 또는 표현식에서 두 행이 비교되면 이러한 연산자 비교 중 하나 이상이 False 또는 Null을 반환해야합니다. 구문은 다음과 같습니다.
테이블 서클 생성 (
참조테이블 작성 ... 제약 ... 제외
자세한 내용.
제외 스포츠 토토 베트맨 조건을 추가하면 스포츠 토토 베트맨 조건 선언에 지정된 유형의 인덱스가 자동으로 생성됩니다.