관계형 데이터베이스의 특징은 데이터를 중복과 저장 공간의 효율성을 위해서 여러 개의 테이블에 분산하여 저장합니다. 또한 분산되어 있는 테이블의 데이터 간에 관계를 지정하여 복합적인 처리를 할 수 있도록 합니다.

외래 키는 테이블 간의 관계를 지정하는 링크 연결고리와 같습니다. 외래 키는 FOREIGN KEY라고 부르며, 관계형 데이터베이스에서 설계하는 데이터 모델링과도 중요한 밀접한 관계를 가지고 있습니다.

09.8.1 외래 키 설정

외래키(FOREIGN KEY) 는 링크 연결 고리로 다른 테이블의 PRIMARY KEY 의 값을 참조합니다.

| 예제 쿼리 |

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

FOREIGN KEY 제약 조건의 이름 지정을 허용하고, 여러 열에 FOREIGN KEY 제약 조건을 정의하려면 다음 SQL 구문을 사용합니다.

| 예제 쿼리 |

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);

09.8.2 외래 키 수정

외래 키는 ALTER TABLE 명령을 통하여 추가하거나 삭제할 수 있습니다.

| 예제 쿼리 |

ALTER TABLE Orders ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID); 

또는 CONSTRAINT 키워드를 통하여 다수의 컬럼 필드를 변경할 수 있습니다.

| 예제 쿼리 |

ALTER TABLE Orders ADD CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID); 

09.8.3 외래 키 삭제

설정한 외래 키는 ALTER TABLE 명령을 통하여 삭제 가능합니다.

| 예제 쿼리 |

ALTER TABLE Orders DROP FOREIGN KEY FK_PersonOrder; 

참조액션

참조액션이란 외래키의 제약조건으로 쿼리를 실행할 수 없을때, 오류를 출력하는 대신에 다른 동작을 수행하도록 하는 것입니다. 참조 액션을 통하여 위반된 제약조건을 해결하는 동작을 수행할 수 있습니다.