Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

제한은 색인와 유사하지만 다른 테이블을 사용하여 관계를 수립할 수도 있습니다.

ALTER TABLE 및 CREATE TABLE 문에 CONSTRAINT 절을 사용하여 제약 조건을 만들거나 삭제합니다. CONSTRAINT 절의 형식은 단일 필드에 제약 조건을 만드는 절과 두 개 이상의 필드에 제약 조건을 만드는 절의 두 가지가 있습니다.

참고: Microsoft Access 데이터베이스 엔진은 Microsoft Access가 아닌 데이터베이스와 함께 CONSTRAINT 또는 DDL(데이터 정의 언어) 문을 사용하도록 지원하지 않습니다. 대신 DAO Create 메서드를 사용합니다.

구문

단일 필드 제약 조건:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

다중 필드 제약 조건:

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

CONSTRAINT 절은 다음과 같이 구성됩니다.

구성 요소

설명

name

만들려는 제약 조건의 이름입니다.

primary1, primary2

기본 키가 지정되는 하나 이상의 필드 이름입니다.

unique1, unique2

고유 키로 지정되는 하나 이상의 필드 이름입니다.

notnull1, notnull2

Null이 아닌 값으로 제한되는 하나 이상의 필드 이름입니다.

ref1, ref2

다른 테이블의 필드를 참조하는 하나 이상의 외래 키 필드 이름입니다.

foreigntable

foreignfield에 의해 지정된 하나 이상의 필드가 포함된 외래 테이블 이름입니다.

foreignfield1, foreignfield2

ref1, ref2에 의해 지정된 foreigntable에 있는 하나 이상의 필드 이름입니다. 참조되는 필드가 foreigntable의 기본 키인 경우 이 절을 생략할 수 있습니다.


주의

필드의 데이터 형식 사양 바로 뒤에 나오는 ALTER TABLE 또는 CREATE TABLE 문의 필드 정의 절에 단일 필드 제약 조건 구문을 사용합니다.

ALTER TABLE 또는 CREATE TABLE 문의 필드 정의 절 외부에서 예약어 CONSTRAINT를 사용할 때마다 다중 필드 제약 조건 구문을 사용합니다.

CONSTRAINT를 사용하여 다음 형식의 제약 조건 중 하나로 필드를 지정할 수 있습니다.

  • UNIQUE 예약어를 사용하여 필드를 고유 키로 지정할 수 있습니다. 즉, 테이블의 두 레코드에서 이 필드의 값이 동일할 수 없습니다. 임의의 필드 또는 필드 목록을 고유로 제한할 수 있습니다. 다중 필드 제약 조건이 고유 키로 지정되는 경우 둘 이상의 레코드가 필드 중 단 하나에서 값이 동일해도 색인에 있는 모든 필드의 결합 값이 고유해야 합니다.

  • PRIMARY KEY 예약어를 사용하여 테이블의 필드 또는 필드 집합을 기본 키로 지정할 수 있습니다. 기본 키의 모든 값은 고유하고 Null이 아니어야 하며 테이블의 기본 키는 하나만 있을 수 있습니다.

    참고: 이미 기본 키가 있는 테이블에 PRIMARY KEY 제약 조건을 설정하지 마세요. 설정하는 경우 오류가 발생합니다.

  • FOREIGN KEY 예약어를 사용하여 필드를 외래 키로 지정할 수 있습니다. 외래 테이블의 기본 키가 둘 이상의 필드로 구성된 경우 다중 필드 제약 조건 정의를 사용하여 모든 참조 필드, 외래 테이블 이름 및 참조 필드가 나열된 것과 동일한 순서로 외래 테이블의 참조 필드 이름을 나열해야 합니다. 하나 이상의 참조 필드가 외래 테이블의 기본 키이면 참조 필드를 지정할 필요가 없습니다. 기본적으로 데이터베이스 엔진은 외래 테이블의 기본 키가 참조 필드인 것처럼 작동합니다.

    외래 키 제약 조건은 해당하는 기본 키 값이 변경될 때 수행할 특정 조치를 정의합니다.

  • CONSTRAINT가 정의된 테이블의 기본 키에 대해 수행된 작업을 기반으로 외래 테이블에서 수행되는 작업을 지정할 수 있습니다. 예를 들어 고객 테이블에 대해 다음 정의를 고려해 보세요.

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

고객 테이블의 기본 키를 참조하는 외래 키 관계를 정의하는 순서 테이블의 다음 정의를 고려해 보세요.

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

ON UPDATE CASCADE 및 ON DELETE CASCADE 절 모두 외래 키에 정의됩니다. ON UPDATE CASCADE 절은 고객 식별자(CustId)가 고객 테이블에서 업데이트되는 경우 순서 테이블을 통해 연속으로 업데이트됨을 의미합니다. 해당 고객 식별자 값을 포함하는 각 순서가 자동으로 새 값으로 업데이트됩니다. ON DELETE CASCADE 절은 고객 테이블에서 고객이 삭제되는 경우 동일한 고객 식별자 값을 포함하는 순서 테이블의 모든 행도 삭제됨을 의미합니다.

다음과 같이 CASCADE 작업이 아닌 SET NULL 작업을 사용하여 순서 테이블의 다른 정의를 고려해 보세요.

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

ON UPDATE SET NULL 절은 고객 식별자(CustId)가 고객 테이블에서 업데이트되는 경우 순서 테이블의 해당 외래 키 값이 자동으로 NULL로 설정됨을 의미합니다. 마찬가지로 ON DELETE SET NULL 절은 고객 테이블에서 고객이 삭제되는 경우 순서 테이블의 모든 해당 외래 키가 자동으로 NULL로 설정됨을 의미합니다.

외래 키에 대한 색인이 자동으로 만들어지지 않도록 NO INDEX 한정자를 사용할 수 있습니다. 이러한 형식의 외래 키 정의는 결과 색인 값이 자주 복제되는 경우에만 사용해야 합니다. 외래 키 색인의 값이 자주 복제되는 경우 색인을 사용하는 것보다 간단히 테이블 스캔을 수행하는 것이 더 효율적일 수 있습니다. 테이블에서 행이 삽입되고 삭제되는 이러한 형식의 색인을 유지하면 성능이 저하되므로 유용하지 않습니다.



도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.

이 정보가 유용한가요?

언어 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?
제출을 누르면 피드백이 Microsoft 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×