본문 바로가기
IT/MYSQL

MYSQL - 테이블 외래키(FOREIGN KEY) 추가, 삭제, 확인하기

by 꿀코 2023. 2. 23.
반응형

외래키(FOREIGN KEY)는 두 테이블을 연결하는 역할을 하는 역할을 합니다. 외래키의 설정에 따라 외래키를 포함하는 테이블을 자식 테이블이라 하고 참조키의 값을 제공하는 테이블을 부모 테이블이라고 합니다. 그럼 테이블에 외래키를 설정하는 다양한 방법과 삭제, 확인 방법을 알아보겠습니다.

 

 

외래키 설정 방법

※ 외래키를 제약 조건을 설정할 경우 참조되는 테이블(부모 테이블)의 필드는 반드시 UNIQUE나 PRIMARY KEY(기본키) 제약 조건이 설정되어 있어야 합니다.

 

1. 테이블 생성 시 외래키 설정(CREATE TABLE)

  • CREATE TABLE (... FOREGIN KEY (필드명) REFERENCES 테이블명 (필드명) ...);
# 부모 테이블
CREATE TABLE MAJOR (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(30)
);

# 자식 테이블
CREATE TABLE STUDENT (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(20),
    AGE INT(3),
    MAJOR_ID INT,
    FOREGIN KEY (MAJOR_ID) REFERENCES MAJOR (ID)
);

 

2. 테이블 수정으로 외래키 설정(ALTER TABLE)

  • ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 FOREGIN KEY (필드명) REFERENCES 테이블명 (필드명);
ALTER TABLE STUDENT
ADD CONSTRAINT MAJORID
FOREGIN KEY (MAJOR_ID) 
REFERENCES MAJOR (ID);

 

 

외래키 삭제 및 확인 방법

1. 외래키 삭제

  • ALTER TABLE 테이블명 DROP FOREGIN KEY 제약조건명;
ALTER TABLE STUDENT DROP FOREGIN KEY MAJORID;

 

2. 외래키 확인

  • 외래키는 INFORMATION_SCHEMA.TABLE_CONSTRAINTS 테이블에서 확인할 수 있습니다.
SELECT * 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'DB명'
AND TABLE_NAME = '테이블명';

 

 

ON DELETE, ON UPDATE 옵션

외래키에 의해 참조되는 테이블은 데이터의 수정이나 삭제 이벤트가 발생하면 참조하고 있는 테이블도 함께 영향을 받습니다. 따라서 수정, 삭제 이벤트가 일어날 경우 ON DELETE, ON UPDATE 옵션을 통해 외래키 제약 조건을 미리 설정할 수 있습니다.

 

1. CASCADE

  • 부모 테이블에서 데이터 수정 또는 삭제 시, 자식 테이블에서도 데이터 수정, 삭제가 같이 됨

2. SET NULL

  • 부모 테이블에서 데이터 수정 또는 삭제 시, 자식 테이블에서는 데이터가 NULL 값으로 변경됨

3. SET DEFAULT

  • 부모 테이블에서 데이터 수정 또는 삭제 시, 자식 테이블에서는 데이터가 필드 기본값으로 변경됨

4. RESTRICT

  • 자식 테이블에 데이터가 존재하면, 부모 테이블에서 데이터 수정 또는 삭제 불가

5. NO ACTION

  • 부모 테이블에서 데이터 수정 또는 삭제 시, 자식 테이블에서는 데이터 변경 없음
# 테이블 생성 시 설정
CREATE TABLE STUDENT (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(20),
    AGE INT(3),
    MAJOR_ID INT,
    FOREGIN KEY (MAJOR_ID) REFERENCES MAJOR (ID) ON UPDATE CASCADE
);

# 테이블 변경 시 설정
ALTER TABLE STUDENT
ADD CONSTRAINT MAJORID
FOREGIN KEY (MAJOR_ID) 
REFERENCES MAJOR (ID) ON DELETE RESTRICT;
반응형

댓글