SQL 기본 | DDL : 데이터 정의 언어 | Foreign Key : 외래 키

외래 키(Foreign Key)가 하나(또는 복수) 다른 테이블의 기본 키 필드를 가리키는 데이터의 참조 무결성(referential integrity)을 확인하기 위하여 사용된다. 즉, 허용된 데이터 값만 데이터베이스에 저장되는 것이다.

외레키 예제

예를 들어, 만일 두 개의 테이블이 있다고 하자. 하나는 customer 테이블에서 모든 고객 데이터가 기록되는 것이고, 또 하나는 orders 테이블에서 고객의 주문이 모두 기록되는 것이다. 그리고 하나의 제약이 있으며, 모든 주문 데이터 고객이 customer 테이블에 존재한다. 여기서 orders 테이블에 외래 키를 설정하고 외래 키가 customer 테이블의 기본 키가 된다. 그러면 orders 테이블에 있는 고객이 모든 customer 테이블에 존재하는 것을 보장할 수 있다. 즉, orders 테이블은 모든 customer 테이블에 있는 고객의 데이터이다.

그 두 테이블의 구조는 다음과 같다.

customer 테이블

필드명 특성
sid 기본 키
last_name
first_name

orders 테이블

필드명 특성
order_id 기본 키
order_date
customer_sid 외래키
amount

위의 예제에서, orders 테이블에 있는 customer_sid 필드는 customer 테이블의 sid 필드를 가리키는 외래 키이다.

다음은 orders 테이블을 만들 때에 사용되는 외래 키의 지정 방법을 몇 가지 들어 있다.

MySQL:

CREATE TABLE orders  (
    order_id INTEGER,   
    order_date DATE,
    customer_sid INTEGER, 
    amount DOUBLE, 
    PRIMARY KEY (order_id), 
    FOREIGN KEY (customer_sid) REFERENCES customer (sid)
);

Oracle:

CREATE TABLE orders (
    order_id INTEGER PRIMARY KEY, 
    order_date DATE, 
    customer_sid INTEGER REFERENCES customer (sid), 
    amount DOUBLE
);

SQL Server:

CREATE TABLE orders  (
    order_id integer PRIMARY KEY, 
    order_date DATETIME, 
    customer_sid INTEGER REFERENCES customer(sid), 
    amount DOUBLE
);

이어서 테이블 구조 변경으로 인해, 외래 키를 지정하는 예제를 보도록 하겠다.
여기서는 orders 테이블이 이미 만들어진 외래 키가 지정되지 않은 것을 가정한다.

MySQL:

ALTER TABLE orders 
ADD FOREIGN KEY (customer_sid) REFERENCES customer (sid);

Oracle:

ALTER TABLE orders 
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES customer(sid);

SQL Server:

ALTER TABLE orders 
ADD FOREIGN KEY (customer_sid) REFERENCES customer (sid);



최종 수정 : 2021-08-27