본문 바로가기

DataBase/Mysql

[ mysql ] 기본키(Primary Key) 와 유니크키(Unique Key) 차이

반응형

 

 


기본키(Primary Key)
-값 중복을 허용하지 않는다. 식별키이다.
-NULL값을 허용하지 않는다. 
-테이블에서 한 개만 생성 가능하다.

유니크키(Unique Key, Unique Index)
-값 중복을 허용하지 않는다.
-NULL값을 허용한다.
-테이블에서 여러 개 생성 가능하다.


"테이블은 오직 하나의 기본키(PK)를 가질 수 있다." 
이는 여러 개의 기본키는 생성할 수 없다는 것을 의미한다.

아래의 ERD 테이블을 보자. 게시글을 읽은 사람들을 저장하기 위한 테이블이다.
board_no 와 user_id 2개의 컬럼을 기본키로 설정할 수 있는 것을 확인할 수 있다.

(예시를 위해  두 컬럼을 PK로 설정하였으나, 실제로는 UNIQUE INDEX로 설정하는 것을 권장한다.)

 

게시글 수신자를 저장하는 테이블 ERD



즉, 기본키는 단 하나의 컬럼에만 설정할 수 있다는 의미가 아니다.
컬럼에 각각 PK를 설정하는 것은 불가능하지만,
여러 컬럼을 묶어서 하나의 PK로 설정하는 것은 가능하다.

DDL로 테이블을 생성할 시에는 아래와 같이 실행해야 한다. 

반응형

 

 

-- 게시글 수신확인
CREATE TABLE `cm_board_read_list` (
   `board_no`  FLOAT       NOT NULL COMMENT '글번호', -- 글번호
   `user_id`   VARCHAR(20) NOT NULL COMMENT '사용자아이디', -- 사용자아이디
   `read_date` TIMESTAMP   NOT NULL COMMENT '읽은일시' -- 읽은일시
)
COMMENT '게시글 수신확인';

-- 게시글 수신확인
ALTER TABLE `cm_board_read_list`
   ADD CONSTRAINT `PK_cm_board_read_list` -- 게시글 수신확인 기본키
      PRIMARY KEY (
         `board_no`, -- 글번호
         `user_id`   -- 사용자아이디
      );

 

컬럼에 대해서 기본키로 설정할지 유니크키로 설정하지는 사용자의 선택에 문제이긴하다.

주민등록번호 같은 고유번호, 게시글 번호 같은 일련번호 등 유일한 값에 기본키 설정을 하는 경우가 다수이다.

그 외에 중복 값을 허용하고 싶지 않고 index를 설정하고 싶은 컬럼에 유니크키(unique index)를 설정한다.

 

 

 

반응형