본문 바로가기

MySQL

MySQL. unique key

[1. 개요]

unique key 의미와 사용 방법 정리


[2. 의미]

기본적으로 중복 데이터 저장을 방지하기 위함.

이미 이런 역할을 하는 Primary key 가 있고, PK 와의 차이점

  1. PK 와 달리 NULL 을 허용한다.
  2. 테이블 당 하나만 존재 할 수 있는 PK 와 달리, 여러 개 존재 할 수 있다.

[3. 생성 방법]

테이블 생성 시

CREATE TABLE `tmp`.`Message` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `user_id` integer NOT NULL,
    `user_to` integer NOT NULL,
    `top_num` integer NOT NULL,
    `priority` smallint NOT NULL,
    `error` varchar(120) NOT NULL,
    UNIQUE myunique (`user_id`, `user_to`, `top_num`) # 3가지 column 이 모두 같은 row는 하나만 존재한다.
);


show index from tmp.Message; # tmp.Message table 에서 index 를 조회한다.

index 생성을 별도로 명시하지 않아도, unique key 생성에 관여하는 모든 column 은 index 설정이 된다.


테이블 alter 시

ALTER TABLE `tmp`.`Message` ADD UNIQUE INDEX myunique1 (`error`);
# 또는
ALTER TABLE `tmp`.`Message` ADD UNIQUE KEY myunique1 (`error`);
# index 나 key 나 둘 다 같은 동작을 한다.


활용.

# 기존 unique index 에 또 다른 column 을 추가 해야 할 시

  • 기존에 걸려 있던 unique key 를 제거하고,
  • 새로 생성해야 한다.
ALTER TABLE `tmp`.`Message` DROP INDEX `myunique`;
ALTER TABLE `tmp`.`Message` ADD UNIQUE INDEX myunique (`id`, `user_id`, `user_to`, `top_num`);

주의 점 

  • 이미 pk 로 걸려 있는 `id` 항목을 새로운 unique key 추가 시
  • pk 외, 새로운 index 를 또 만든다...

'MySQL' 카테고리의 다른 글

[작성해야 됨] mysql. 유용한 함수  (0) 2024.02.22
MySQL. 테이블 용량 관리  (0) 2023.09.26
MySQL, innodb_autoinc_lock_mode  (0) 2023.06.21
MySQL, SQL_SAFE_UPDATES  (0) 2023.06.15
MySQL. LAST_INSERT_ID  (0) 2023.06.15