기본키(PRIMARY KEY)는 데이터 테이블의 각 행(row)을 고유하게 식별하는 열(column)로, 중복된 값을 허용하지 않는다.
이를 통해 데이터의 무결성을 유지하고, 빠른 데이터 접근할 수 있다.
create table <테이블명>
(
column01 datatype NOT NULL,
column02 datatype NOT NULL,
...
constraint conastraintName # 해당 문구는 생략 가능
# conastraintName은 일반적으로 PK_<테이블명> 처럼 만듬
primary key(column01, column02, ...)
);
-------------------------------------------------------------------------------
create table person
(
id int NOT NULL,
name varchar(16),
age int,
primary key(id)
);
한 번에 모든 키본키를 삭제(부분 칼럼만을 삭제할 순 없다.)
alter table <테이블명>
drop primary key;
-------------------------------------------------------------------------------
alter table person
drop primary key;
alter table <테이블명>
add primary key(column01, column02, ...);
-------------------------------------------------------------------------------
alter table person
add primary key(id);
외래키(FOREIGN KEY)는 한 테이블의 열(column)이 다른 테이블의 기본키(PRIMARY KEY)와 연결된다는 제약 조건의 키(KEY)이다. 이를 통해 테이블 간의 관계를 정의하고 데이터 무결성을 유지할 수 있다.
craete table <테이블명>
(
column01 datatype NOT NULL,
column02 datatype NOT NULL,
column03 datatype,
column04 datatype,
...
constraint <기본키 제약명> // 생략 가능
primary key(column01, column02),
constraint <외래키 제약명> // 생략 가능, 하지만 외래키 삭재 시 불편할 수 있다.
foreign key(column03, column04) references <참조할 테이블명>(<참조 칼럼명>)
);
-------------------------------------------------------------------------------
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)
);
왜래키 제약명을 생략하고 테이블을 생성할 경우, show create table <테이블명> 쿼리문을 작성하여 확인할 수 있다.

alter table <테이블명>
drop foreign key <삭제할 외래키 제약명>;
-------------------------------------------------------------------------------
alter table orders
drop foreign key FK_person;
alter table <테이블명>
add foreign key (<추가할 외래키 칼럼>) references <참조할 테이블명>(참조 칼럼명)
-------------------------------------------------------------------------------
alter table orders
add foreign key (pid) references person(pid);