Primary Key 속성:
- 테이블의 각 레코드를 식별
- 중복되지 않은 고유값을 포함
- NULL 값을 포함할 수 없음
- 테이블 당 하나의 기본키를 가짐 (column 하나로 지정할 수 있고, 여러개의 column을 하나의 기본키로 지정 가능)
Primary Key 생성 문법
CREATE TABLE tablename ( column1 datatype NOT NULL, column2 datatype NOT NULL, ... CONSTRAINT constraint_name #생략 가능 PRIMARY KEY (column1, column2, ...) );
Example 1: 하나의 column을 기본키로 설정하는 경우
CREATE TABLE person
(
pid int NOT NULL, #pid는 person ID의 줄임말+
name varchar(16),
age int,
sex char,
PRIMARY KEY (pid)
);
DESC person;
Example 2: 여러개의 column을 기본키로 설정하는 경우
CREATE TABLE animal
(
name varchar(16) NOT NULL,
type varchar(16) NOT NULL,
age int,
PRIMARY KEY (name, type)
);
DESC animal;
Primary Key 삭제 문법
ALTER TABLE tablename DROP PRIMARY KEY;
Example 1: 하나의 column이 기본키로 설정된 경우
ALTER TABLE person
DROP PRIMARY KEY;
DESC person;
pid(person ID)의 key 속성에 primary key가 사라진걸 확인할 수 있다.
Example 2: 여러개의 column이 기본키로 설정된 경우
하나의 column이 기본키로 설정된 경우와 삭제하는 방법은 동일하다.
ALTER TABLE animal
DROP PRIMARY KEY;
DESC animal;
name과 type의 key 속성에 primary key가 사라진걸 확인할 수 있다.
ALTER TABLE tablename
ADD PRIMARY KEY (column1, column2, ...);
Example 1: 하나의 column을 기본키로 지정하는 경우
ALTER TABLE person
ADD PRIMARY KEY (pid);
DESC person;
Example 2: 여러개의 column을 기본키로 지정하는 경우
ALTER TABLE animal
ADD CONSTRAINT PK_animal PRIMARY KEY (name, type);
#constraint PK_animal 생략 가능 (생략 시 자동 생성)
DESC animal;
constraint PK_animal을 생략해도 위와 같이 똑같은 결과값이 나온다.
Foreign Key
는 한 테이블을 다른 테이블과 연결해주는 역할이며, 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)이다.
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) ); #foreign key는 참조를 하는 연결되는 reference가 필요함
Example 1: 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)
); #oid = order ID
DESC orders;
Foreign Key로 지정이 되는 경우 Key 속성에서 MUL
로 표시가 되는걸 확인할 수 있다.
Example 2: CREATE TABLE에서 CONSTRAINT(제약조건) 생략하여 FOREIGN KEY를 지정하는 경우
CREATE TABLE job
(
jid int not null,
name varchar(16),
pid int,
PRIMARY KEY (jid),
FOREIGN KEY (pid) REFERENCES person(pid)
);
DESC job;
Constraint 확인 문법
자동 생성된 Constraint 확인하는 방법
SHOW CREATE TABLE tablename;
Example: job 테이블의 constraint 확인
SHOW CREATE TABLE job;
CONSTRAINT 'job_ibfk_1'로 생성되어 있는걸 확인할 수 있다. 해당 constraint 정보는 나중에 foreign key를 설정할 때 필요하다.
Foreign Key 삭제 문법
ALTER TABLE tablename DROP FOREIGN KEY FK_constraint;
Example 1: Foreign Key 삭제
ALTER TABLE orders
DROP FOREIGN KEY FK_person;
DESC orders;
pid의 key 속성에 MUL
이 남아있음을 알 수 있다.
show create table orders;
Key 'FK_person' 은 남아있되 reference는 깨져있는걸 확인할 수 있다. 따라서, foreign key가 삭제되었다는 것을 알 수 있다.
Foreign Key 생성 문법
ALTER TABLE tablename ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column);
Example 1:
ALTER TABLE orders
ADD FOREIGN KEY (pid) REFERENCES person(pid);
DESC orders;
SHOW CREATE TABLE orders;
자동으로 constraint 'orders_ibfk_1' 생성된 걸 확인할 수 있으며 reference로 person 테이블에서 pid를 가져왔다고 알 수 있다.