Primary Key, Foreign Key

eunbi kim·2024년 4월 7일
0
  • Primary Key
  • Foreign Key
  • Foreign Key 예제
  • exercises

Primary Key

기본 키. 테이블의 각 레코드를 식별하기 위해
중복되지 않은 고유값을 포함하는 키이다.
Null값을 포함할 수 없으며,
테이블 당 하나의 기본키를 가진다.

  • Primary Key 생성 문법 1:
CREATE TABLE tablename
(
	column1 datatype NOT NULL,
    column2 datatype NOT NULL,
    ...
    CONSTRAINT constraint_name
    PRIMARY KEY (column1, column2, ...)
);

하나의 컬럼을 기본키로 설정하는 경우:

Key <- PRI로 표시됨을 확인하였다.

여러 개의 컬럼을 기본키로 설정하는 경우:

테이블당 기본키는 하나이기 때문에,
이 두개가 다 각자 PRI라는 게 아니라
이 두개를 묶어서, PRI라는 것이다.

  • PK 삭제 문법:
ALTER TABLE tablename
DROP PRIMARY KEY;
  • Primary Key 생성 문법 2:
ALTER TABLE tablename
ADD PRIMARY KEY (column1, column2, ...);
ALTER TABLE tablename
ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ...);

constraint <-생략 가능.

constraint <-생략 가능.


Foreign Key

외래키. 한 테이블을 다른 테이블과 연결해주는 역할이며,
참조되는 테이블은 그 테이블의 기본키(혹은 단일값)이다.

  • Foreign Key 생성 문법 1:
CREATE TABLE tablename
(
	column1 datatype NOT NULL,
    column2 datatype NOT NULL,
    ...
    CONSTRAINT constraint_name
    PRIMARY KEY (column1, column2, ...),
    CONSTRAINT constraint_name
    FOREIGN KEY (column3, column4, ...)
    REFERENCES REF_tablename(REF_column)
);

CREATE TABLE에서 FK를 지정하는 경우:

orders테이블의 pk는 oid고,
fk는 person 테이블의 pid를 참조할 때!

CREATE TABLE에서 FK를 지정하는 경우,
constraint를 생략할 수 있다.

FK는 여러개를 생성할 수 있고,
constraint를 생략하면 자동 생성된다.

자동 생성된 constraint를 확인하는 방법:

SHOW CREATE TABLE tablename;

job_ibfk_1라고 자동으로 생성됨이 보인다.

  • Foreign Key 삭제문법:
ALTER TABLE tablename
DROP FOREIGN KEY FK_constraint;
  • Foreign Key 생성 문법 2:
ALTER TABLE tablename
ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column);


Foreign Key 예제

police_station과 crime_status 테이블 사이에 관계 (Foreign Key)를 설정해 봅시다.
AWS RDS(database-1)의 zerobase에서 작업합니다.

police_station.name과, crime_status.police_station을 매칭하여 관계를 맺을 수 있다.

경찰서 이름이 각 테이블에서 표시되는 형식이 다르다.

-> "서울"과 "경찰서"를 붙여 일치할 것 같다. 확인하기:

police_station.name을 pk로 설정하고,

crime_status 테이블에 fk로 사용할 컬럼(reference)을 추가하고...

police_station.name을 참조하는
fk를 생성해주고

fk값 update
crime_status의 reference를
police_station의 name으로 업데이트 할래
concat을 이용해서 서울 + ... + 경찰서 형태로~

select해서 보면 , 잘 들어갔다.

이제 둘은 참조하는 관계이다.
-> FK 기준으로 조인할 수 있다!!

경찰서별 주소를 가져왔다~~


Exercises

  1. study_id가 pk, patient_id가 person 테이블의 pid와 연결된 fk로 지정된
    study 테이블을 생성하세요.

  1. 생성한 테이블의 pk를 삭제하세요.

  1. 생성한 테이블의 fk를 삭제하세요.

  1. study 테이블의 patient_id를 person 테이블의 pid와 연결된 fk로 등록하세요.

  1. study 테이블의 study_id를 pk로 등록하세요.

0개의 댓글