테이블의 각 레코드를 식별
중복되지 않은 고유값을 포함
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();
한 테이블을 다른 테이블과 연결해주는 역할이며,
참조되는 테이블의 항목은 그 테이블의 기본키(혹은 단일값)
여러개가 생성될 수 있음.
↓ 예제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);