5월 26일 수요일 (12일차) - DML과 KEYㅇ

@_@·2021년 5월 26일
0

Database

목록 보기
25/28

<목차>
ㅇ 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연산의 핵심이야.
문법은 그냥 찾아서 사용하면 되는 거고

profile
STEP BY STEP

0개의 댓글