코딩 스쿨 MySQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

MySQL Foreign Key

MySQL FOREIGN KEY: 데이터베이스 간의 관계 설정하기

FOREIGN KEY는 MySQL에서 두 테이블 간의 관계를 정의하는 데 사용되는 제약 조건입니다. 외래 키는 한 테이블의 열이 다른 테이블의 기본 키를 참조하여, 데이터의 무결성을 유지하고 관계형 데이터베이스 구조를 강화합니다. 이 가이드는 MySQL에서 FOREIGN KEY를 사용하는 방법, 기본 문법, 예제 및 주의사항을 설명합니다.


1. 기본 개념

1.1. 정의

FOREIGN KEY는 한 테이블의 열이 다른 테이블의 기본 키를 참조하는 관계를 설정합니다. 이를 통해 두 테이블 간의 데이터 연결을 표현할 수 있으며, 외래 키가 설정된 열에는 항상 참조된 테이블에 존재하는 값만 입력될 수 있습니다.

1.2. 기본 문법

FOREIGN KEY는 테이블을 생성할 때 또는 ALTER TABLE 문을 사용하여 추가할 수 있습니다.

1.2.1. 테이블 생성 시 FOREIGN KEY 설정

CREATE TABLE child_table (
    child_id INT,
    parent_id INT,
    ...
    FOREIGN KEY (parent_id) REFERENCES parent_table(parent_id)
);

1.2.2. 기존 테이블에 FOREIGN KEY 추가

ALTER TABLE child_table
ADD CONSTRAINT fk_name FOREIGN KEY (parent_id) REFERENCES parent_table(parent_id);


2. FOREIGN KEY 사용 예제

2.1. 테이블 생성 시 FOREIGN KEY 설정

예를 들어, users 테이블과 orders 테이블 간의 관계를 설정해보겠습니다.

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

위의 쿼리는 users 테이블을 생성하고, 각 사용자의 주문을 기록하는 orders 테이블을 생성합니다. orders 테이블의 user_id 열은 users 테이블의 user_id를 참조하는 외래 키입니다.

2.2. 기존 테이블에 FOREIGN KEY 추가

기존 테이블에 외래 키 제약 조건을 추가하려면 다음과 같은 쿼리를 사용할 수 있습니다.

ALTER TABLE orders
ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(user_id);

이 쿼리는 orders 테이블의 user_id 열에 대해 users 테이블의 user_id를 참조하는 외래 키를 추가합니다.


3. FOREIGN KEY의 유용성

  1. 데이터 무결성 보장: FOREIGN KEY는 참조 무결성을 유지하여, 데이터베이스의 무결성을 보장합니다. 예를 들어, 존재하지 않는 user_id를 가진 주문을 입력할 수 없습니다.
  2. 데이터 관계 표현: 외래 키를 통해 두 테이블 간의 관계를 명확히 할 수 있으며, 데이터 모델을 더 쉽게 이해할 수 있습니다.
  3. Cascade 옵션: 외래 키 제약 조건은 부모 테이블에서의 데이터 변경 시 자식 테이블에 영향을 미치도록 설정할 수 있습니다. 이를 통해 데이터 삭제나 업데이트 시 관련 데이터를 자동으로 처리할 수 있습니다.
    • ON DELETE CASCADE: 부모 레코드가 삭제될 때, 관련된 자식 레코드도 자동으로 삭제됩니다.
    • ON UPDATE CASCADE: 부모 레코드의 기본 키가 변경될 때, 관련된 자식 레코드의 외래 키도 자동으로 변경됩니다.

예제

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

이 쿼리는 user_id를 참조하는 외래 키를 추가하며, 사용자가 삭제되면 해당 사용자의 주문도 함께 삭제되도록 설정합니다.


4. FOREIGN KEY 사용 시 주의사항

  1. 참조 무결성: 외래 키는 참조하는 기본 키가 반드시 존재해야 하며, 외래 키가 설정된 열에는 참조된 값을 사용해야 합니다. 만약 참조된 값이 삭제되면 외래 키 제약 조건이 유지되지 않을 수 있습니다.
  2. NULL 값 처리: 외래 키는 NULL 값을 허용합니다. 하지만 NULL 값은 부모 테이블의 기본 키와 연결되지 않으므로, 데이터 무결성을 해치지 않습니다.
  3. 권한: FOREIGN KEY 제약 조건을 추가하거나 삭제할 때는 적절한 권한이 필요합니다. 기본적으로 ALTER 권한이 있어야 합니다.
  4. 복잡한 쿼리 성능: 외래 키 관계가 많은 경우, 데이터 삽입 및 삭제 시 성능에 영향을 줄 수 있습니다. 데이터베이스의 설계 시 이를 고려해야 합니다.

5. FOREIGN KEY 수정 및 삭제

기존 테이블에서 외래 키 제약 조건을 수정하거나 삭제할 수 있습니다.

5.1. FOREIGN KEY 삭제

ALTER TABLE orders
DROP FOREIGN KEY fk_user;

이 쿼리는 orders 테이블에서 fk_user라는 외래 키 제약 조건을 삭제합니다.


6. 요약

MySQL FOREIGN KEY는 데이터베이스 테이블 간의 관계를 설정하고 데이터 무결성을 보장하는 데 중요한 역할을 합니다. 외래 키를 사용하면 데이터의 참조 무결성을 유지하고, 관련된 데이터를 쉽게 관리할 수 있습니다.

  • 정의: 한 테이블의 열이 다른 테이블의 기본 키를 참조하는 관계 설정.
  • 고유성: 외래 키는 NULL을 허용하지만, 참조된 값은 반드시 존재해야 함.
  • 데이터 무결성 보장: 참조 무결성을 유지하여 잘못된 데이터 입력 방지.
  • Cascade 옵션: 부모 데이터 변경 시 자식 데이터의 자동 처리 가능.

MySQL의 FOREIGN KEY 기능을 활용하여 효율적이고 안정적인 데이터 관리를 수행할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com