[SQL] 14-PRIMARY KEY, FOREIGN KEY

김지현·2024년 6월 16일

SQL

목록 보기
13/16

📂 PRIMARY KEY (기본키)

  • 테이블의 각 레코드 식별
  • 중복되지 않은 고유값
  • NULL값을 가질 수 없음
  • 테이블 당 하나의 기본키를 가짐

📍 생성 방법

1. 테이블을 생성하면서 기본키 지정

CREATE TABLE tablename
(
	column1 datatype NOT NULL,
    column2 datatype NOT NULL,
    ...
    CONSTRAINT constraint_name	-- 생략 가능
    PRIMARY KEY (column1, column2, ...)
);

2. 이미 만들어져있는 테이블에 추가

ALTER TABLE tablename
ADD (CONSTRAINT "constraint_name") PRIMARY KEY (column1, column2, ...);
-- CONSTRAINT를 통해 이름 지정 가능 (생략하면 pk이름 자동 생성)

📍 삭제 방법

  • Primary Key는 테이블 당 하나만 존재하므로, 한 개의 컬럼이든 여러 개의 컬럼으로 지정된 경우든 문법은 동일
ALTER TABLE tablename
DROP PRIMARY KEY;

📂 FOREIGN KEY (외래키)

  • 한 테이블을 다른 테이블과 연결해주는 역할
  • 참조되는 테이블의 항목은 그 테이블의 기본키 (or 단일값)
  • 여러 개 가질 수 있음

📍 생성 방법

1. 테이블을 생성하면서 외래키 지정

CREATE TABLE tablename
(
	column1 datatype NOT NULL,
    column2 datatype NOT NULL,
    column3 datatype,
    column4 datatype,
    ...
    CONSTRAINT constraint_name	-- 생략 가능
    PRIMARY KEY (column1, column2, ...),
    CONSTRAINT constraint_name	-- 생략 가능
    FOREIGN KEY (column3, column4, ...) REFERENCES REF_tablename(REF_column)
);

2. 이미 만들어져있는 테이블에 추가

ALTER TABLE tablename
ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column);

📍 삭제 방법

  • 한 테이블에 여러 개 존재할 수 있으므로 이름을 지정해줘야 함
ALTER TABLE tablename
DROP FOREIGN KEY FK_constraint;

✅ 자동 생성된 CONSTRAINT 확인 방법

-- CONSTRAINT생략하면 이름 자동 생성
SHOW CREATE TABLE tablename;

실습

  1. study_id가 PK, patient_id가 person 테이블의 pid와 연결된 FK로 지정된 study 테이블 생성
CREATE TABLE study
(
	study_id int not null,
    study_date date,
    study_time time,
    patient_id int,
    primary key (study_id),
    constraint FK_study foreign key (patient_id) references person (pid)
);
  1. 생성한 테이블에서 PK 삭제
ALTER TABLE study DROP PRIMARY KEY;
  1. 생성한 테이블에서 FK 삭제
ALTER TABLE study DROP FOREIGN KEY FK_study;
  1. study 테이블의 patient_id를 person 테이블의 pid와 연결된 FK로 등록
ALTER TABLE study ADD FOREIGN KEY (patient_id) REFERENCES person (pid);
  1. study 테이블의 study_id를 PK로 등록
ALTER TABLE study ADD PRIMARY KEY (study_id);

0개의 댓글