1. 외래 키(Foreign Key)
MySQL에 외래 키는 데이터베이스의 두 테이블 간의 관계를 정의하는 데 사용하며, 한 테이블 열의 다른 테이블의 키본 키(Primary Key)를 참조하도록 설정하여 데이터 무결성을 유지합니다. 외래 키의 개념은 다음과 같습니다.
- 정의: 외래 키는 한 테이블의 컬럼이 다른 테이블의 기본 키를 참조해 두 테이블 간의 관계를 설정하는 데 사용
- 용도: 데이터의 무결성을 보장하며, 두 테이블 간의 연관성을 유지
- 예) 고객 테이블과 주문 테이블이 있을 때, 주문 테이블의 고객 ID 컬럼은 고객 테이블의 기본 키를 외래 키로 참조
2. 외래 키 설정하기
외래 키는 테이블을 생성할 때 또는 기존 테이블에 추가할 때 설정할 수 있습니다.
-- 테이블 생성 시 외래 키 설정
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE orders_list (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
)
위의 예에서 orders 테이블의 customer_id 컬럼은 custormers 테이블의 customer_id 컬럼을 참조하는 외래 키입니다. 기존 테이블에 외래 키를 추가하려면 ALTER TABLE 명령어를 사용합니다.
-- 기존 테이블에 외래키 추가
ALTER TABLE orders_list
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
3. 외래 키의 제약 조건
외래 키에는 다음과 같은 제약 조건을 설정할 수 있습니다.
- ON DELETE: 참조된 데이터가 삭제될 떄 동작을 정의
- CASCADE: 참조된 행이 삭제되면 관련된 모든 행도 삭제
- SET NULL: 참조된 행이 삭제되면 외래 키 값이 NULL 로 설정
- NO ACTION: 참조된 행이 삭제되면 오류가 발생
- ON UPDATE: 참조된 데이터가 변경될 때 동작을 정의
- CASCADE: 참조된 행이 업데이트되면 관련된 모든 행도 업데이트
- SET NULL: 참조된 행이 업데이트되면 외래 키 값이 NULL 로 설정
- NO ACTION: 참조된 행이 업데이트되면 오류가 발생
CREATE TABLE constrains (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
4. 외래 키 확인
현재 데이터베이스의 외래 키 제약 조건을 확인하려면 다음의 SQL 명령어를 사용합니다.
SHOW CREATE TABLE constrains;
이 명령어는 orders 테이블의 생성 SQL을 보여주며, 외래 키 정보도 포함됩니다.
5. 외래 키 삭제
외래 키를 삭제하려면 ALTER TABLE 명령어를 사용해 삭제합니다.
ALTER TABLE orders_list
DROP FOREIGN KEY fk_customer;
// 외래 키 확인
SHOW CREATE TABLE orders_list;
요약
- 외래 키는 두 테이블 간 관계를 설정해 데이터의 무결성을 유지하는 데 사용
- 외래 키는 테이블 생성 시 또는 기존 테이블에 추가할 수 있음
- 외래 키는 삭제 및 업데이트 시 동작을 제어하는 다양한 제약조건을 설정
GitHub - Koras02/mysql-bloging
Contribute to Koras02/mysql-bloging development by creating an account on GitHub.
github.com
LIST
'Back-End > MySQL' 카테고리의 다른 글
[MySQL] 8장(완) - MySQL 인덱스 (0) | 2025.03.09 |
---|---|
[MySQL] 7장 주요 SQL(Structured Query Language) (0) | 2025.03.08 |
[MySQL] 5장 기본 키(Primary Key) (0) | 2025.03.02 |
[MySQL] 4장 레코드 (0) | 2025.02.27 |
[MySQL] 3장. MySQL 테이블 (0) | 2025.02.26 |