SQL 22

이재훈·2024년 2월 9일
1

Zerobase_DA3_SQL

목록 보기
12/16
post-thumbnail

Primary KEY(기본키)

테이블의 각 레코드를 식별
중복되지 않은 고유값을 포함
NULL값을 포함할 수 없음
테이블 당 하나의 기본키를 갖음

↓ 프라이머리 키 생성문법

create table 할 때 생성가능
create table person
-> (
-> pid int NOT NULL,
-> name varchar(16),
-> age int,
-> sex char,
-> primary key (pid)
-> );

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

create table animal
-> (
-> name varchar(16) NOT NULL,
-> type varchar(16) NOT N,
-> age int,
-> primary key (name, type)
-> );
이럴 경우 각각 하나가 프라이머리 키가 아니라, 두개가 하나의 프라이머리 키가 된다

↓ 프라이머리 키를 삭제하는 방법

alter table person
drop primary key;

↓ 이미 만들어진 테이블에 프라이머리 키 생성

alter table person
add primary key();

Foreign KEY(외래키)

한 테이블을 다른 테이블과 연결해주는 역할이며,
참조되는 테이블의 항목은 그 테이블의 기본키(혹은 단일값)
여러개가 생성될 수 있음.

↓ 예제1)

CREATE TABLE orders (
oid int NOT NULL,
order_no varchar(16),
pid int,
PRIMARY KEY (oid),
FOREIGN KEY(pid)
REFERENCES person(pid)
);

↓ 예제2)

CREATE TABLE job (
jid int NOT NULL,
name varchar(16),
pid int,
PRIMARY KEY (jid),
FOREIGN KEY(pid)
REFERENCES person(pid)
);

Foreign KEY 삭제 방법

Alter table orders
Drop foreign key constraint이름

포린키 생성할 때에는 constraint_FK foreignKEY(pid) REFERENCES person(pid) 해주는게 좋음

그렇지 않으면 자체적으로 constraont 이름을 생성해서 지울 때 귀찮아짐
이름을 조회하는 방법

Show create table orders 하면 테이블이 생성될 때 정보 조회 가능

이미 생성된 Foreign KEY 추가 방법

alter table orders
add foreign key (pid) references person(pid);

문제1) 다음과 같이 studyid가 PRIMARY_KEY, patient_id가 person 테이블의
id와 연결된 FOREIGN KEY로 지정된 study 테이블을 생성
(Local에서 진행)

create table study (
study_id int NOT NULL,
study_date date,
patient_id int,
study_time time,
PRIMARY KEY(study_id),
FOREIGN KEY(patient_id) REFERENCES person(pid)
);

문제2) 생성한 테이블의 PRIMARY KEY를 삭제하세요

alter table study
drop primary key;

문제3) 생성한 테이블의 FOREIGN KEY를 삭제하세요

alter table study
drop foreign key study_ibfk_1;

문제4) study 테이블의 patient_id를 person테이블의 pid와 연결된 FOREIGN KEY로 등록하세요

alter table study
add FOREIGN KEY (patient_id) REFERENCES person(pid);

문제5) study 테이블의 study_id를 PRIMARY KEY로 등록하세요.

alter table study
add PRIMARY KEY(study_id);

profile
💻 To be a Data analyst

0개의 댓글