MySQL에서 외래키 설정하기
MySQL에서 외래키를 설정하는 방법은 관계형 데이터베이스의 데이터 무결성을 유지하는 데 중요한 역할을 합니다. 외래키(Foreign Key)는 특정 테이블에서 다른 테이블의 기본키를 참조하는 키로, 이 두 테이블 간의 관계를 정의합니다. 이번 글에서는 외래키 사용법과 설정 방법에 대해 알아보겠습니다.

외래키의 정의와 중요성
외래키는 보통 부모 테이블과 자식 테이블 간의 관계를 나타내며, 자식 테이블에서 부모 테이블의 특정 행을 참조하는 역할을 합니다. 이를 통해 자식 테이블의 데이터가 부모 테이블의 데이터와 일관성을 유지하도록 도와줍니다. 외래키를 잘 활용하면 데이터의 무결성을 보장할 수 있지만, 잘못된 설정은 시스템에 부하를 증가시킬 수 있습니다.
외래키 설정 방법
MySQL에서 외래키를 설정하는 가장 기초적인 방법은 테이블 생성 시 외래키 제약조건을 포함하는 것입니다. 다음은 외래키를 사용하는 예입니다.
- 주문 테이블 생성 예시
CREATE TABLE Orders (OrderID INT PRIMARY KEY, CustomerID INT, OrderDate DATE, TotalAmount DECIMAL(10,2), FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID));
- 고객 테이블 생성 예시
CREATE TABLE Customer (CustomerID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Email VARCHAR(100));
위의 예시에서 주문 테이블은 고객 테이블의 기본키를 참조하여 외래키 관계를 설정합니다. 이렇게 하면 고객 테이블에 있는 특정 고객 정보와 관련된 주문 정보가 일관되게 유지됩니다.
무결성 유지 및 참조 무결성 제약조건
외래키를 사용하면 부모 테이블에 있는 데이터의 삭제 또는 업데이트가 자식 테이블에 미치는 영향을 제어할 수 있습니다. MySQL에서는 ON DELETE
및 ON UPDATE
와 같은 옵션을 통해 이러한 동작을 설정할 수 있습니다. 예를 들어, 부모 테이블에서 특정 행이 삭제될 때, 자식 테이블에 있는 관련 데이터를 자동으로 삭제하도록 지정할 수 있습니다.

인덱스 생성 및 성능 향상
외래키를 설정하면 MySQL은 자동으로 해당 열에 대한 인덱스를 생성하여 성능을 최적화합니다. 인덱스는 데이터 검색 속도를 높여 주기 때문에, 외래키를 사용하는 테이블의 성능이 향상될 수 있습니다.
외래키 제약조건의 활용
외래키 제약조건을 통해 자식 테이블에 존재하는 값이 부모 테이블에 있는 값과 일치하는지를 확인할 수 있습니다. 이를 통해 잘못된 데이터가 삽입되는 것을 방지할 수 있습니다. 예를 들어, 자식 테이블에 부모 테이블에 존재하지 않는 값을 삽입하려고 할 때, 에러가 발생하게 됩니다.
실제 SQL 쿼리 예제
이제 실제 SQL 쿼리를 통해 외래키를 설정하고 사용하는 예를 살펴보겠습니다.
-- 고객 테이블 생성
CREATE TABLE Customer (
CustomerID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100)
);
-- 주문 테이블 생성
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATE,
TotalAmount DECIMAL(10,2),
FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID) ON DELETE CASCADE ON UPDATE CASCADE
);
이 예에서 ON DELETE CASCADE
와 ON UPDATE CASCADE
를 사용하면, 부모 테이블의 데이터가 삭제되거나 업데이트될 때 자식 테이블의 관련 데이터도 함께 삭제되거나 업데이트됩니다.
외래키 제거하기
필요에 따라 외래키를 제거해야 할 경우도 있습니다. 이때는 ALTER TABLE
문을 사용하여 외래키를 삭제할 수 있습니다. 다음은 외래키를 제거하는 예입니다.
ALTER TABLE Orders DROP FOREIGN KEY Orders_ibfk_1;
이와 같이 외래키를 제거하여 두 테이블 간의 관계를 단절할 수 있습니다.

결론
MySQL에서 외래키를 사용하는 것은 데이터베이스의 무결성을 유지하는 데 매우 중요한 요소입니다. 외래키를 적절히 설정하고 활용하면, 데이터베이스의 일관성과 신뢰성을 높일 수 있습니다. 그러나 외래키의 사용은 데이터베이스 성능에 영향을 미칠 수 있으므로, 주의하여 사용할 필요가 있습니다.
앞서 설명한 내용을 참고하여, MySQL의 외래키를 효과적으로 활용해 보시기 바랍니다.
자주 찾으시는 질문 FAQ
MySQL에서 외래키란 무엇인가요?
외래키는 한 테이블이 다른 테이블의 기본키를 참조하는 키로, 두 테이블 간의 관계를 설정해줍니다.
외래키를 어떻게 설정할 수 있나요?
테이블 생성 시 외래키 제약 조건을 포함하여 설정하거나, 이미 생성된 테이블에 ALTER TABLE 문을 사용하여 추가할 수 있습니다.
외래키의 장점은 무엇인가요?
외래키를 사용하면 데이터의 일관성을 유지하고, 잘못된 데이터 입력을 방지하여 데이터 무결성을 확보할 수 있습니다.
부모 테이블의 데이터가 삭제되면 자식 테이블은 어떻게 되나요?
부모 테이블의 데이터가 삭제되면 자식 테이블에 미치는 영향을 설정할 수 있으며, ON DELETE CASCADE를 지정하면 관련된 자식 데이터도 함께 삭제됩니다.
외래키를 어떻게 제거하나요?
ALTER TABLE 명령어를 사용하여 외래키를 삭제할 수 있으며, 이때 특정 외래키 이름을 지정해야 합니다.