코드 그라데이션
Day07-2. 제약 조건 (2) - 외래 키 제약 조건 본문
외래 키 제약 조건(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
'Database > Mega-MySQL' 카테고리의 다른 글
Day08. 뷰 테이블 (0) | 2023.06.26 |
---|---|
Day07-3. 제약 조건 (3) - UNIQUE, CHECK 제약 조건, DEFAULT (0) | 2023.06.25 |
Day06-07. 제약 조건(1) - 기본 키 제약 조건 (0) | 2023.06.22 |
Day06. SELF JOIN, UNION(ALL), (NOT)IN (0) | 2023.06.22 |
Day05-3. OUTER JOIN, CROSS JOIN (0) | 2023.06.21 |
Comments