Primary key, Foreign key

노건우·2023년 7월 25일
0

primary key

기본키(primary key)
pk
기본키 역시 기본적인 제약조건들은 테이블을 생성할 때 같이 정의한다.
테이블당 하나만 정의가 가능하다(두 개 이상의 pk는 조합키/복합키 라고 불린다. 묶어서 하나로 본다)
주키/기본키/식별자/pk등으로 불리고 있다.
pk는 not null + unique + index
자동 index가 생성되는데 이는 검색 키로서 검색 속도를 향상시킨다.

CREATE TABLE primary_test(
student_id number(10)PRIMARY KEY,
name		varchar2(20)
);
SELECT * FROM PRIMARY_TEST 
primary key 생성과정

foreign key

  • 외부키/외래키/참조키/외부 식별자/fk등으로 불립니다
  • fk가 정의된 테이블을 자식테이블이라고 칭한다.
  • 참조되는 테이블 즉, pk가 있는 테이블을 부모 테이블이라고 한다
  • 부모 테이블은 pk컬럼에 존재하는 데이터만 자식 테이블에 입력할 수 있다.
  • 부모테이블은 자식의 데이터나 테이블이 삭제된다고 영향을 받지 않는다
  • 참조하는 데이터 컬럼과 데이터 타입은 반드시 일치해야 한다
  • 참조할 수 있는 컬럼은 기본키이거나 unique만 가능하다
  • 보통 pk와 엮는다
    //외래키 만들기
CREATE TABLE daddy2(
idx number(10),
mID number(10) PRIMARY key
); 먼저 primary key를 만들어 주고
CREATE TABLE daughter2(
idx number(10)PRIMARY KEY,
mID number(10),
CONSTRAINTS fk_da FOREIGN key(mID)
REFERENCES daddy(mID) ON DELETE set null
); foreign key를 만들어 준다.
INSERT INTO daddy2 VALUES (1,10);
INSERT INTO daddy2 VALUES (2,15);
INSERT INTO daddy2 VALUES (3,19);
그 상태에서 이렇게 값을 집어 넣는다고 하자.


daddy2 테이블의 결과값이다.

INSERT INTO daughter2 values(500,10)
INSERT INTO daughter2 values(600,15)
INSERT INTO daughter2 values(90,19)
이것이 daughter의 데이터 삽입 과정

이 상태에서 DELETE FROM daddy2 WHERE idx = 1; 코드로 데이터 하나를 delete해보자.

그에 따라 null값을 취하는 것을 알 수 있다. 1->10->500으로 기억하자

삭제 옵션

  • on delete cascade
    ->참조되는 부모 테이블의 행에 대한 delete를 허용한다.
    즉, 참조되는 부모 테이블의 값이 삭제되면 연쇄적으로 자식 테이블 값 역시 삭제된다.
    ->보통 많이 사용

  • on delete set null
    ->참조되는 부모 테이블의 행에 대한 delete를 허용한다.
    즉, 부모 테이블 값이 삭제가 되면 해당 참조하는 자식 테이블의 값들은 null값으로 설정된다

profile
초보 개발자 이야기

0개의 댓글