<목차>
ㅇ DML 수행 시 PK, FK
ㅇ PK, FK로 연결되어 있는 테이블에 DML 연산 수행 시 발생하는 현상들
ㅇ 자식 테이블(임플로이 테이블)에서 DML 수행 시
(INSERT)
- 103 10 삽입 가능? YES. 있는 부서니까
- 104 40 삽입 가능? NO. 부모테이블에 40 없어서 안 돼
(UPDATE)
- 10번을 20번으로 갱신 가능? YES. 있는 부서로 이관한 것
- 10번을 40번으로 갱신 가능? NO. 부모테이블에 40 없어서 안 돼
(DELETE)
- 102 10 삭제 가능? YES. 퇴사 하는 거야~
(결론)
- 자식 테이블은 참조하고 있는 값 안에서라면 DML 연산 자유스럽게 움직여
- 참조범위 안에서 수행 가능
- 여기서는 10, 20, 30 인 거지
ㅇ 부모 테이블(임플로이 테이블)에서 DML 수행 시
- 문제는 부모테이블이야..무자식이 상팔자ㅋㅋㅋ
- ~~가 있으면 신경 써줘야 해
(INSERT)
- 10 삽입 가능? NO. PK라서 중복 허용하지 않아
- 40 삽입 가능? YES. 없는 애 삽입하는 거니까
(UPDATE)
- 10 -> 20으로 갱신 가능? NO. PK라서 중복 허용하지 않아 (20은 이미 있잖아)
- 10 -> 40으로 갱신 가능? 될 수도 있고 안될 수도 있다
- 현재 구조상으로는 안 돼 (10을 e테이블에서 사용하고 있어서)
∵ 부모님한테 잘 다녀오겠습니다 하고 나왔는데
집에 왔는데 새로운 분이 아이구 우리 아들 딸 하는 거야
- 즉, e테이블이 참조하고 있는 d_id는 갱신될 수 없어
- 참조를 하고 있는데 d_id가 바뀌어버리면 근거값이 사라지는 거니까
- 무결성이 깨져버리는 거야
- 즉, 자식 테이블이 참조하고 있는 데이터는 갱신될 수 없어
- 근데 특정 작업을 선택하면 되기도 해 - 내일 배울 거야
- 포린키 설정할 때 주는 여러 명령문 중에 있어
- 기본적인 구조는 변경할 수 없게 되어 있지만 특정 옵션 주면 변경돼 (거의 사용 안 해)
- 포린키 만든 가장 큰 이유가. (관계이기도 하지만) 종속적 삭제를 방지하기 위해서니까
- 10번 지워버리면 자식테이블이 삭제되지 않도록
- 30 -> 40으로 갱신 가능? YES. 참조되고 있는 값이 없기 때문에
30이 e테이블에서 사용되지 않았어서
(강제로 불가능하게 만들 수도 있지만. 이거는 인서트.딜리트.등을 아예 수행 못 하게 하는 거)
(DELETE)
- 10번 삭제 가능? NO. 참조되고 있는 값이 있어서 삭제할 수 없어
- 30번 삭제 가능? YES. 참조되고 있는 값이 없어서 가능해
ㅇ 테이블의 관계를 잘 이해하고 있어야 해
- 보통 테이블이 독립적으로 움직이는 경우는 거의 없어
90프로 이상이 연결되어 있어
- 이런 테이블의 관계를 모르고 DML 연산이 어떻게 진행되는지 모르면
- 자바 코드 안에서 문법에는 오류가 없는데 자꾸 안돼 ㅠㅜ
초보개발자들이 많이 하는 실수..
- 특히 DB는 하나의 데이터베이스에 수많은 유저가 동시에 들어와서 작업 진행
- 그래서 이런 관계를 정확하게 인지하고 있어야 해
ㅇ 문법은 책 보면서 하면 돼. 중요한 건 이거야!!
이 2개가 dml연산의 핵심이야.
문법은 그냥 찾아서 사용하면 되는 거고