
Primary Key (기본 키)
- 테이블의 각 레코드를 식별
- 중복되지 않은 고유값을 포함
- NULL 값을 포함할 수 없음
- 테이블 당 하나의 기본키를 가짐
CREATE TABLE tablename ( column1 datatype NOT NULL, column2 datatype NOT NULL, ... CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ...) );
하나의 칼럼을 기본키로 설정하는 경우
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 NULL,
age int,
PRIMARY KEY (name, type)
);

ALTER TABLE tablename
DROP PRIMARY KEY;
하나의 칼럼을 기본키로 설정하는 경우
ALTER TABLE person
DROP PRIMARY KEY;

여러개의 칼럼이 기본키로 설정된 경우
ALTER TABLE ANIMAL
DROP PRIMARY KEY;

ALTER TABLE tablename
ADD PRIMARY KEY (column1, column2, ...);
하나의 칼럼을 기본키로 지정하는 경우
alter table person
add primary key (pid);

여러개의 칼럼을 기본키로 지정하는 경우
alter table animal
add constraint PK_animal primary key (name, type);
Foreign Key (외래키)한 테이블을 다른 테이블과 연결해주는 역할이며, 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)
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)
);
CREATE TABLE에서 FOREIGN KEY를 지정하는 경우
create table orders
(
oid int not null,
order_no varchar(16),
pid int,
primary key (oid),
constraint FK_person foreign key (pid) references person(pid)
);

CREATE TABLE에서 FOREIGN KEY를 지정하는 경우, CONSTRAINT를 생략할 수 있다.
create table job
(
jid int not null,
name varchar(16),
pid int,
primary key (jid),
foreign key (pid) references person(pid)
);

자동 생성된 CONSTRAINT를 확인하는 방법
SHOW CREATE TABLE tablename;
show create table job;

ALTER TABLE tablename
DROP FOREIGN KEY FK_constraint;
alter table orders
drop foreign key FK_person;

TABLE이 생성된 이후에도 ALTER TABLE을 통해 FOREIGN KEY를 지정할 수 있다.
ALTER TABLE tablename
ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column);
alter table orders
add foreign key (pid) references person(pid);

