다음을 통해 공유


CONSTRAINT 절

적용 대상: 예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime

CREATE TABLE 또는 CREATE MATERIALIZED VIEW 문의 일부로 정보 기본 키 또는 정보 외래 키를 추가합니다.

Delta Lake 테이블에 검사약 조건을 추가하려면 테이블을 만든 후 ALTER TABLE을 사용합니다.

구문

table_constraint 절을 사용하여 여러 열에 걸쳐 있는 제약 조건을 정의하거나 구문을 열 정의와 분리합니다.

table_constraint
   { [ CONSTRAINT name ]
     { PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
       { FOREIGN KEY ( foreign_key_column [, ...] )
         REFERENCES parent_table [ ( parent_column [, ...] ) ]
         [ foreign_key_option | constraint_option ] [...]
       }
     }
   }

column_constraint 절을 사용하여 단일 열 정의와 관련된 제약 조건을 정의합니다.

column_constraint
  { [ CONSTRAINT name ]
    { PRIMARY KEY [ constraint_option ] [...] |
      { [ FOREIGN KEY ]
        REFERENCES parent_table [ ( parent_column [, ...] ) ]
        [ foreign_key_option | constraint_option ] [...]
      }
    }
  }
constraint_option
    { NOT ENFORCED |
      DEFERRABLE |
      INITIALLY DEFERRED |
      { RELY | NORELY } }

foreign_key_option
    { MATCH FULL |
      ON UPDATE NO ACTION |
      ON DELETE NO ACTION }

비표준 SQL 언어와의 호환성을 위해 NOT ENFORCED DEFERRABLE INITIALLY DEFERRED 대신 ENABLE NOVALIDATE를 지정할 수 있습니다.

매개 변수

  • CONSTRAINT이름

    필요에 따라 제약 조건의 이름을 지정합니다. 이름은 스키마 내에서 고유해야 합니다. 이름이 제공되지 않으면 Azure Databricks에서 이름이 생성됩니다.

  • PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]

    적용 대상:예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime 11.3 LTS 이상 예로 표시된 확인 Unity 카탈로그만

    테이블 또는 구체화된 뷰에 정보 기본 키 제약 조건을 추가합니다. 테이블 또는 구체화된 뷰에는 최대 하나의 기본 키가 있을 수 있습니다.

    기본 키 열은 암시적으로 NOT NULL로 정의됩니다.

    hive_metastore 카탈로그의 테이블에는 기본 키 제약 조건이 지원되지 않습니다.

    • key_column

      제목 테이블 또는 구체화된 뷰의 열입니다. 열 이름은 반복해서는 안 됩니다.

    • TIMESERIES

      적용 대상: 예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime 13.3 LTS 이상

      필요에 따라 기본 키 열 구성 요소에 시간 표시로 레이블을 지정합니다.

  • PRIMARY KEY [ constraint_option ] [...]

    앞의 키 열 정의를 사용하여 테이블 또는 구체화된 뷰에 단일 열 기본 키 제약 조건을 추가합니다.

    column_constrainttable_constraint와 동일합니다.

    PRIMARY KEY (key_column) [ constraint_option ] [...]

  • FOREIGN KEY (foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option

    적용 대상:예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime 11.3 LTS 이상 예로 표시된 확인 Unity 카탈로그만

    정보 외래 키(참조 무결성) 제약 조건을 테이블 또는 구체화된 뷰에 추가합니다.

    hive_metastore 카탈로그의 테이블에는 외래 키 제약 조건이 지원되지 않습니다.

    외래 키 열의 순열만 다른 외래 키 제약 조건은 허용되지 않습니다.

    • foreign_key_column

      제목 테이블 또는 구체화된 뷰의 열입니다. 열 이름은 반복해서는 안 됩니다. 각 열의 데이터 형식은 일치하는 parent_column의 형식과 일치해야 합니다. 열의 수는 parent_column의 수와 일치해야 합니다. 두 개의 외래 키는 동일한 외래 키 열 세트를 공유할 수 없습니다.

    • parent_table

      외래 키가 참조하는 테이블 또는 구체화된 뷰를 지정합니다. 테이블에 정의된 PRIMARY KEY 제약 조건이 있어야 하며 테이블에 대한 권한이 있어야 합니다 SELECT .

    • parent_column

      기본 키의 일부인 부모 테이블 또는 구체화된 뷰의 열입니다. 부모 테이블 또는 구체화된 뷰의 모든 기본 키 열이 나열되어야 합니다.

      부모 열이 나열되지 않으면 PRIMARY KEY 정의에 지정된 순서로 지정됩니다.

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      앞의 외래 키 열 정의를 사용하여 테이블 또는 구체화된 뷰에 단일 열 외래 키 제약 조건을 추가합니다.

      column_constrainttable_constraint와 동일합니다.

      FOREIGN KEY ( foreign_key_column ) REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

  • constraint_option

    제약 조건의 속성을 나열합니다. 모든 속성은 선택 사항이지만 기본적으로 암시됩니다. 각 속성은 최대 한 번 지정할 수 있습니다.

    • NOT ENFORCED

      Azure Databricks는 기존 행 또는 새 행에 적용하는 작업을 수행하지 않습니다.

    • DEFERRABLE

      제약 조건 적용을 연기할 수 있습니다.

    • INITIALLY DEFERRED

      제약 조건 적용이 지연됩니다.

    • NORELY 또는 RELY

      적용 대상: 예로 표시된 확인 제약 조건에 대한 PRIMARY KEY Databricks SQL 예로 표시된 확인 Databricks Runtime 14.2 이상

      적용 대상: 예로 표시된 확인 제약 조건에 대한 FOREIGN KEY Databricks Runtime 15.4 이상

      이 경우 RELYAzure Databricks가 제약 조건을 악용하여 쿼리를 다시 작성할 수 있습니다. 제약 조건이 충족되는지 확인하는 것은 사용자의 책임입니다. 충족되지 않는 제약 조건에 의존하면 잘못된 쿼리 결과가 발생할 수 있습니다.

      기본값은 NORELY입니다.

  • foreign_key_option

    외래 키 제약 조건과 관련된 속성을 나열합니다. 모든 속성은 선택 사항이지만 기본적으로 암시됩니다. 각 속성은 최대 한 번 지정할 수 있습니다.

    • MATCH FULL

      제약 조건을 true로 간주하려면 모든 열 값이 NOT NULL이어야 합니다.

    • ON UPDATE NO ACTION

      부모 PRIMARY KEY가 업데이트되면 Azure Databricks는 업데이트를 제한하거나 외래 키를 업데이트하는 작업을 수행하지 않습니다.

    • ON DELETE NO ACTION

      부모 행이 삭제되면 Azure Databricks는 작업을 제한하거나, 외래 키를 업데이트하거나, 종속 행을 삭제하는 작업을 수행하지 않습니다.

Important

Azure Databricks는 기본 키 또는 외래 키 제약 조건을 적용하지 않습니다. 기본 또는 외래 키를 추가하기 전에 키 제약 조건을 확인합니다. 수집 프로세스는 이러한 보증을 제공하거나 데이터에 대한 검사를 실행할 수 있습니다.

예제

-- Create a table with a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING,
                       CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name));

-- create a table with a foreign key
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING,
                    CONSTRAINT pets_persons_fk FOREIGN KEY (owner_first_name, owner_last_name) REFERENCES persons);

-- Create a table with a single column primary key and system generated name
> CREATE TABLE customers(customerid STRING NOT NULL PRIMARY KEY, name STRING);

-- Create a table with a names single column primary key and a named single column foreign key
> CREATE TABLE orders(orderid BIGINT NOT NULL CONSTRAINT orders_pk PRIMARY KEY,
                      customerid STRING CONSTRAINT orders_customers_fk REFERENCES customers);