본문 바로가기

IT/SQL

SQL 제약조건 Constraints - 외래키_Foreign key

외래키 (FOREIGN KEY)는 테이블 사이의 관련성이 파괴되는 것을 막기 위해 사용된다. 다시 말해서 어느 한 테이블의 외래키는 다른 테이블의 기본키가 된다. 

외래키 (FOREIGN KEY)는 한 테이블에 필드 한 개 또는 그 이상이 될 수 있으며, 관련된 다른 테이블의 기본키(PRIMARY KEY)가 외래기로 지정될 수 있다.

 

외래키 (Foreign Key)를 가지고 있는 테이블을 자식 테이블 (child table)이라고 부르고, 기본키를 가지고 있는 테이블을 부모 테이블 (parent table)이라고 부른다.

아래 두 개의 테이블을 살펴보자.

 

 

Customer Table

customer_ID name age
1 최영은 31
2 김진수 26
3 강나은 40


Orders Table

order_ID order_num customer_ID
1 3456298 2
2 3409820 1
3 2098767 1
4 7288982 3

 

이 두 테이블은 관계형 테이블이다.
☞ Customer 테이블의 기본키는 customer_ID이다.

☞ Order 테이블의 customer_ID는 외래키이다.

☞ Customer 테이블은 부모 테이블(Parents table).

☞ Order 테이블은 자식 테이블(Child table).

 


만약 Order table에 데이터를 넣는데, customer_ID가 5인 레코드를 넣는다면 실패한다. 왜냐면 부모 테이블인 Customer 테이블에 customer_ID가 5인 데이터가 없기 때문이다.



 

▼ Create table에서 외래키 (Foreign Key) 설정하는 쿼리

Q. Order라는 테이블을 만들면서 customer_ID라는 컬럼을 외래키로 지정해보자.

 

MySQL:

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

  

 

SQL Server / Oracle / MS Access:

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

 

 

 

 

외래키 (Foreign Key) 제약 조건에 대한 이름을 정하고, 여러 컬럼들을 외래키로 지정하려면 다음의 쿼리를 이용한다.

MySQL / SQL Server / Oracle / MS Access:

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

 

 

 

 

 

 

 

alter table을 이용한 테이블 수정식에서 외래키를 설정하는 방법

Q. 이미 만들어져 있는 Order 테이블에 customer_ID 컬럼을 외래키로 설정해보자.

 

MySQL / SQL Server / Oracle / MS Access:

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

 

 

 

 

외래키 (Foreign Key) 제약 조건에 대한 이름을 정하고, 2개 이상의 컬럼을 외래키로 설정하기 위한 쿼리.

MySQL / SQL Server / Oracle / MS Access:

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



 

 

 

 

 

 

외래키 (Foreign Key) 제약 조건 삭제하기

설정 해놓은 외래키를 삭제할 때는 다음의 쿼리를 이용한다.

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;



SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;




 

참조: w3schools