1. 외래 키
- 한 릴레이션의 키 중에서 다른 릴레이션의 투플을 유일하게 식별할 수 있는 키
- 한 릴레이션의 투플에서 다른 릴레이션의 투플을 참조하기 위해 사용
즉, 쉽게 말해서 다른 테이블에 있는 기본 키를 참조에서 사용하는 경우를 말한다.
2. 외래 키 제약 조건

만약 테이블 간의 데이터가 이러한 연관성을 가질 때
mysql> DELETE FROM Category WHERE CategoryNo = 2;
이 명령어를 실행하게 되면 오류가 발생한다. 이 오류는 "무결성"과 관련이 있다.
Product테이블에는 참조 무결성을 위한 외래 키 제약조건이 적용되어있고, Product테이블의 CategoryNo 필드는 Category테이블의 CategoryNo 필드를 참조하고 있다. 만약 Category테이블의 CategoryNo이 2인 투플을 삭제하게 되면 Product테이블의 CategoryNo가 2인 투플의 무결성이 지켜지지 않게 된다.
이를 해결하기 위한 제약 조건은 여러가지 있다.
1. Restrict
개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우에 변경/삭제가 취소된다.
즉, 내가 변경/삭제하고 싶은 투플을 다른 투플이 참조하고 있을 경우에 변경/삭제를 하지 못한다는 의미인데,
위의 사진을 예시로 들어보면, Category테이블의 CategoryNo이 2인 투플을 변경/삭제하지 못하는 것이다.
2. Cascade
개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 함께 변경/삭제된다.
즉, 내가 변경/삭제하고 싶은 투플을 다른 투플이 참조하고 있을 경우 같이 변경/삭제된다는 의미인데,
위의 사진을 예시로 들어보면, Category테이블의 CategoryNo이 2인 투플을 삭제하면 참조하고 있는 투플의 행 자체가 지워진다.
결국엔 ProductNo이 2312211인 행이 지워지는 것이다.
3. Set Null
개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우에 참조하고 있는 값이 Null로 세팅된다.
즉, 내가 변경/삭제하고 싶은 투플을 다른 투플이 참조하고 있을 경우 Null로 세팅된다는 의미인데,
위의 사진을 예시로 들어보면, Category테이블의 CategoryNo이 2인 투플을 삭제하면, Product 테이블의 CategoryNo가 2인 투플은 값이 Null로 변한다. Cascade는 전부 변경/삭제했던 것과는 다르게 Set Null은 참조하고 있는 값만 Null로 바꿔주어서,
해당 행에서 CategoryNo을 제외하면 원래 값이 들어있게 된다.
4. No Action
개체를 변경/삭제할 때 다른 개체가 해당 개체를 참조하고 있을 경우 해당 개체만 변경/삭제되고, 참조하고 있는 개체는 변동이 없다. (단 MySql에서는 기본적으로 Restrict와 동일하게 동작한다.(취소))
'모각코 > 뉴진주택' 카테고리의 다른 글
| [뉴진주택] 6회차 (0) | 2024.02.07 |
|---|---|
| [뉴진주택] 5회차 (0) | 2024.02.03 |
| [뉴진주택] 4회차 (0) | 2024.02.03 |
| [뉴진주택] 3회차 (0) | 2024.01.20 |
| [뉴진주택] 1회차 (0) | 2024.01.06 |