코드 그라데이션

Day07-2. 제약 조건 (2) - 외래 키 제약 조건 본문

Database/Mega-MySQL

Day07-2. 제약 조건 (2) - 외래 키 제약 조건

완벽한 장면 2023. 6. 25. 14:15

외래 키 제약 조건(Foreign Key)

  • 외래 키 제약 조건은 두 테이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해 주는 역할을 한다.
  • 외래 키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존하게 된다.
  • 외래 키 테이블에 데이터를 입력할 때는 꼭 기준 테이블을 참조해서 입력하므로 기준 테이
DROP TABLE IF EXISTS buytbl, usertbl;
CREATE TABLE usertbl
( userID  CHAR(8) NOT NULL PRIMARY KEY,
  name    VARCHAR(10) NOT NULL,
  birthYear   INT NOT NULL,
);

CREATE TABLE buytbl
(  num int AUTO_INCREMENT PRIMARY KEY,
   userid  CHAR(8) NOT NULL,
   prodName CHAR(6) NOT NULL,
   FOREIGN KEY(userID) REFERENCES userTBL(userID)
);

 

위에서 보면 외래 키 테이블(buyTBL)이 열에서 참조하는 기준 테이블(userTBL)의 열(userID)은 기본 키로 설정되어 있다.

만약, 기준 테이블이 기본 키 또는 UNIQUE 가 아니라면 외래 키 관계는 설정되지 않는다.

 

직접 외래키의 이름을 설정하려면 이렇게 쓰면 된다.

CREATE TABLE buytbl
(  num int AUTO_INCREMENT PRIMARY KEY,
   userid  CHAR(8) NOT NULL,
   prodName CHAR(6) NOT NULL,
   CONSTRAINT FK_userTBL_buyTBL FOREIGN KEY(userID) REFERENCES userTBL(userID)
);

위의 예시에서는 외래 키 제약조건 이름을  FK_userTBL_buyTBL 로 지정했다.

이 이름을 지정할 필요가 없다면 그냥 FOREIGN KEY(userID) REFERENCES userTBL(userID) 이거만 써주면 된다.

 

기준 테이블의 열 이름이 외래 키 테이블의 열 이름과 꼭 동일할 필요는 없다.

 

또 다른 방법으로는 ALTER TABLE 구문을 이용하는 것이다.

ALTER TABLE buyTBL 
	ADD CONSTRAINT FK_userTBL_buyTBL
    FOREIGN KEY (userID)
    REFERENCES userTBL(userID);

 

 

외래 키 옵션 중에 ON DELETE CASCADE 또는 ON UPDATE CASCADE 가 있는데,

이는 기준 테이블의 데이터가 변경되었을 때 외래 키 테이블도 자동으로 적용되도록 설정해준다.

ALTER TABLE buytbl
    ADD CONSTRAINT FK_usertbl_buytbl
        FOREIGN KEY (userID)
            REFERENCES usertbl (userID)
            ON UPDATE CASCADE
            ON DELETE CASCADE;

별도로 지정하지 않으면 ON UPDATE NO ACTION 및 ON DELETE NO ACTION 을 지정한 것과 동일하다.

(=> 회원 테이블의 회원 아이디가 변경되어도 아무런 일이 일어나지 않는다는 의미이다.)

728x90
Comments