코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

SQL Foreign Key

SQL FOREIGN KEY: 외래 키

SQL FOREIGN KEY는 한 테이블의 열이 다른 테이블의 PRIMARY KEY 또는 UNIQUE 키를 참조하는 제약 조건입니다. FOREIGN KEY는 두 테이블 간의 관계를 설정하며, 이를 통해 데이터베이스에서 참조 무결성을 보장할 수 있습니다. 외래 키는 두 테이블 사이에 관계를 정의하고, 참조된 테이블의 값만을 허용하여 데이터의 무결성을 유지합니다.


1. FOREIGN KEY의 특징

  1. 참조 무결성: 외래 키는 참조된 테이블의 기본 키 또는 고유한 값만을 허용하여 데이터의 일관성을 보장합니다.
  2. 다중 테이블 간 관계: 외래 키는 두 테이블 간의 1:1, 1:N 또는 N:M 관계를 설정할 수 있습니다.
  3. 제약 조건으로 참조된 값만 삽입: 외래 키 제약 조건을 설정하면 참조된 테이블에 없는 값은 삽입할 수 없습니다.
  4. 참조 작업: 외래 키는 CASCADE, SET NULL, NO ACTION 등의 옵션을 사용하여 참조된 값의 변경 또는 삭제 시 동작을 제어할 수 있습니다.

2. FOREIGN KEY 기본 문법

2.1 테이블 생성 시 FOREIGN KEY 설정

CREATE TABLE 테이블_이름 (
    열_이름 데이터_타입,
    FOREIGN KEY (열_이름) REFERENCES 참조_테이블(참조_열_이름)
);

  • 열_이름: 외래 키로 사용할 열의 이름.
  • 참조_테이블: 외래 키가 참조할 다른 테이블의 이름.
  • 참조_열_이름: 참조 테이블에서 기본 키 또는 UNIQUE 키로 설정된 열.

2.2 테이블 생성 후 FOREIGN KEY 추가 (ALTER TABLE)

ALTER TABLE 테이블_이름
ADD CONSTRAINT 제약조건_이름 FOREIGN KEY (열_이름) REFERENCES 참조_테이블(참조_열_이름);


3. FOREIGN KEY 예제

3.1 테이블 생성 시 외래 키 설정

예제: employees 테이블의 department_iddepartments 테이블의 department_id를 참조

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

이 명령은 employees 테이블의 department_id 열이 departments 테이블의 department_id를 참조하도록 설정합니다. 이는 두 테이블 간의 부서와 직원 관계를 정의합니다. 즉, employees 테이블의 department_id 값은 departments 테이블에 존재하는 값이어야만 합니다.


3.2 테이블 생성 후 외래 키 추가 (ALTER TABLE)

예제: employees 테이블에 외래 키 추가

ALTER TABLE employees
ADD CONSTRAINT fk_department_id FOREIGN KEY (department_id) REFERENCES departments(department_id);

이 명령은 employees 테이블에 fk_department_id라는 외래 키 제약 조건을 추가하여, department_id 열이 departments 테이블의 department_id를 참조하도록 합니다.


4. 외래 키 동작 옵션

외래 키 제약 조건을 설정할 때, 참조된 테이블의 행이 수정 또는 삭제될 경우 어떻게 처리할지를 정의할 수 있습니다.

  • ON DELETE CASCADE: 참조된 테이블에서 행이 삭제되면, 외래 키로 연결된 테이블의 행도 자동으로 삭제됩니다.
  • ON UPDATE CASCADE: 참조된 테이블의 값이 변경되면, 외래 키로 연결된 테이블의 값도 자동으로 변경됩니다.
  • ON DELETE SET NULL: 참조된 테이블의 행이 삭제되면, 외래 키로 연결된 테이블의 열이 NULL로 설정됩니다.
  • ON DELETE RESTRICT: 참조된 테이블의 행이 삭제되면, 외래 키로 연결된 테이블에서 삭제할 수 없습니다.
  • ON DELETE NO ACTION: 기본 동작으로, 아무런 특별한 동작 없이 기본적으로 참조된 값이 삭제되지 않도록 방지합니다.

문법

CREATE TABLE 테이블_이름 (
    열_이름 데이터_타입,
    FOREIGN KEY (열_이름) REFERENCES 참조_테이블(참조_열_이름)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

예제: employees 테이블에서 외래 키 삭제 시 자동으로 관련 행 삭제

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

이 예제는 departments 테이블의 행이 삭제되거나 수정될 경우, employees 테이블의 관련된 행도 자동으로 삭제 또는 업데이트되도록 설정합니다.


5. FOREIGN KEY 제거

기존 테이블에서 FOREIGN KEY 제약 조건을 제거할 수 있습니다.

문법

ALTER TABLE 테이블_이름
DROP FOREIGN KEY 제약조건_이름;

예제: employees 테이블에서 외래 키 제거

ALTER TABLE employees
DROP FOREIGN KEY fk_department_id;

이 명령은 employees 테이블에서 fk_department_id라는 외래 키 제약 조건을 제거합니다.


6. FOREIGN KEY와 JOIN

FOREIGN KEY는 두 테이블 간의 관계를 정의하므로, 이를 이용해 JOIN 쿼리를 수행할 수 있습니다. 예를 들어, employees 테이블과 departments 테이블을 외래 키로 연결한 상태에서 JOIN을 사용할 수 있습니다.

예제: employeesdepartments 테이블을 JOIN하여 데이터 조회

SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;

이 쿼리는 employees 테이블과 departments 테이블을 department_id를 기준으로 JOIN하여 직원의 이름과 부서 이름을 조회합니다.


7. 실전 예제

예제 1: employees 테이블과 departments 테이블 간의 외래 키 설정

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

이 예제는 departmentsemployees 테이블을 department_id를 통해 연결하고, CASCADE 옵션을 설정하여 참조된 값이 변경되면 자동으로 변경 또는 삭제되도록 합니다.

예제 2: 외래 키 제거

ALTER TABLE employees
DROP FOREIGN KEY fk_department_id;

이 명령은 employees 테이블에서 외래 키를 제거합니다.


8. 요약

  • FOREIGN KEY는 두 테이블 간의 참조 무결성을 보장하며, 한 테이블의 열이 다른 테이블의 기본 키고유 키를 참조하도록 설정합니다.
  • 테이블을 생성할 때 또는 ALTER TABLE을 통해 외래 키를 추가할 수 있습니다.
  • 외래 키는 참조된 테이블의 값이 삭제되거나 변경될 때 ON DELETE CASCADE, ON UPDATE CASCADE와 같은 동작을 설정할 수 있습니다.
  • 외래 키 제약 조건을 설정하면 참조된 테이블의 값을 강제로 맞춰야 하므로, 데이터의 일관성무결성을 유지할 수 있습니다.

FOREIGN KEY는 데이터베이스에서 테이블 간의 관계를 정의하고, 데이터의 무결성을 보장하는 중요한 도구입니다. 이를 통해 여러 테이블의 데이터를 연계하여 효율적으로 관리할 수 있습니다.


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