본문 바로가기
코딩/SQL

[MySQL] Primary Key, Foreign Key

by 미생22 2023. 3. 5.
728x90

1. Primary Key(기본 키)란

- 테이블의 각 레코드를 식별

- 중복되지 않은 고유값을 포함

- NULL 값을 포함할 수 없음

- 테이블 당 하나의 기본키를 가짐

 

2. Primary Key 생성 문법1

Create table시 변수 설정할 때 primary key를 설정할 컬럼을 마지막에 나열한다.

Constraint constraint_name Primary Key (컬럼1, 컬럼2, ...)를 마지막에 써준다.

이 때 Constraint constraint_name은 생략이 가능하고 Primary Key (컬럼1, 컬럼2, ...)만 적어도 된다.

constraint_name 는 primary key의 이름으로 지정할 이름을 넣어주면 된다.

CREATE TABLE tablename
(
	column1 datatype NOT NULL,
    column2 datatype NOT NULL,
    ...
    CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ...)
);

주의) constraint_name이 같은 primary key는 컬럼이 다르더라도 하나의 primary key라는 뜻이다.

3. Primary Key 삭제 문법

ALTER TABLE tablename DROP PRIMARY KEY;

이름을 별도로 주지 않아도 되는 이유는 table당 하나의 primary key만 갖고있기 때문에 tablename만 적어도 drop primary key를 하면 삭제되기 때문이다.

컬럼이 하나일 때와 컬럼이 여러개 일 때 상관없이 동일한 방법으로 삭제할 수 있다.

4. Primary Key 생성 문법2

ALTER TABLE tablename ADD [CONSTRAINT constraint_name] PRIMARY KEY (column1, column2, ...);

변수를 지정할 때 primary key를 설정해준다. [] 안의 constraint는 생략가능하다

5. Foreign Key(외래 키)란

- 한 테이블을 다른 테이블과 연결해주는 역할

- 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)

6. Foreign Key 생성 문법1

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)
);

꼭 References로 다른 테이블과 연결시켜야 한다. constraint는 생략가능하다.

 

Foreign key는 Primary key와 다르게 한 테이블에 여러개 있을 수 있다.

이 때 자동 생성된 CONSTRAINT 이름을 확인하는 방법은

SHOW CREATE TABLE tablename;

을 통해 확인가능하다.

7. Foreign Key 삭제 문법

foreign key의 경우 constraint가 테이블에 여러개 있을 수 있으므로 constraint name을 꼭 지정해줘야 한다.

ALTER TABLE tablename DROP FOREIGN KEY FK_constraint;

desc tablename 했을 때 KEY에 MUL이라고 foreign key가 남아있다고 뜨겠지만

show create table tablename;을 통해 확인해보면 reference는 깨져있고 key 속성만 남아있는 걸 확인할 수 있다.

8. Foreign Key 생성 문법2

이제 먼저 만들어진 table에 foreign key를 추가하는 방법에 대해 알아보자.

ALTER TABLE tablename ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column);

create가 아닌 alter로 추가하면 된다.

728x90