외래키 (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
'IT > SQL' 카테고리의 다른 글
SQL 제약조건 Constraints - 체크 _ Check (0) | 2021.09.13 |
---|---|
SQL 제약조건 Constraints - Primary key (0) | 2021.09.03 |
[sql] 제약조건 constraints - NOT NULL (0) | 2021.09.02 |
[sql] alter table, 테이블의 컬럼명 변경하기 (0) | 2021.08.31 |
[sql] alter table, 테이블의 컬럼 정보 수정 및 컬럼 삭제 (0) | 2021.08.23 |