Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 기존 테이블에 고유 키(Unique Key) 추가하는 방법 – 중복 행이 있을 때 주의사항까지

이미 생성된 테이블에 고유 키(Unique Key)를 추가해야 하는 상황은 실무에서 자주 발생합니다. 이때 ALTER TABLE 명령어와 ADD CONSTRAINT 구문을 사용하면 간단하게 해결할 수 있습니다.

고유 키 추가 기본 문법

기존 테이블에 고유 제약조건을 추가하는 기본적인 문법은 다음과 같습니다.

ALTER TABLE yourTableName ADD CONSTRAINT yourConstraintName UNIQUE(yourColumnName1,yourColumnName2,............N);

하나의 컬럼뿐만 아니라 여러 컬럼을 조합한 복합 고유 키도 지정할 수 있다는 점이 특징입니다.

예제 테이블 생성하기

개념을 이해하기 위해 몇 개의 컬럼을 가진 테이블을 먼저 만들어 보겠습니다.

mysql> create table MovieCollectionDemo
    -> (
       -> MovieId int,
       -> MovieDirectorName varchar(200),
       -> NumberOfSongs int unsigned
    -> );
Query OK, 0 rows affected (0.62 sec)

현재 제약조건 확인하기

테이블 생성 직후에는 어떤 고유 제약조건도 설정되어 있지 않습니다. DESC 명령으로 테이블 구조를 확인해 보겠습니다.

mysql> desc MovieCollectionDemo;

실행 결과는 다음과 같습니다.

+-------------------+------------------+------+-----+---------+-------+
| Field             | Type             | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| MovieId           | int(11)          | YES  |     | NULL    |       |
| MovieDirectorName | varchar(200)     | YES  |     | NULL    |       |
| NumberOfSongs     | int(10) unsigned | YES  |     | NULL    |       |
+-------------------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Key 컬럼이 모두 비어 있는 것을 볼 수 있습니다. 즉, 아직 어떤 컬럼에도 고유 키가 적용되지 않은 상태입니다.

ALTER TABLE로 고유 키 추가하기

이제 앞서 소개한 문법을 사용해 MovieId 컬럼에 고유 키를 추가해 보겠습니다.

mysql> alter table MovieCollectionDemo add constraint uni_moviecollectio unique(MovieId);
Query OK, 0 rows affected (0.46 sec)
Records: 0 Duplicates: 0 Warnings: 0

쿼리가 정상적으로 실행되었습니다. 참고로 만약 테이블에 이미 중복된 값이 존재한다면 이 명령은 에러를 반환하며 실행되지 않습니다. 따라서 고유 키를 추가하기 전에 반드시 대상 컬럼의 중복 여부를 먼저 점검해야 합니다.

고유 키 적용 결과 확인하기

테이블 구조를 다시 조회하여 MovieId 컬럼에 고유 키가 제대로 적용되었는지 확인해 보겠습니다.

mysql> desc MovieCollectionDemo;

실행 결과는 다음과 같습니다.

+-------------------+------------------+------+-----+---------+-------+
| Field             | Type             | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| MovieId           | int(11)          | YES  | UNI | NULL    |       |
| MovieDirectorName | varchar(200)     | YES  |     | NULL    |       |
| NumberOfSongs     | int(10) unsigned | YES  |     | NULL    |       |
+-------------------+------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

출력 결과에서 Key 항목에 “UNI”가 표시된 것을 확인할 수 있습니다. 이는 MovieId 필드에 고유 키가 성공적으로 적용되었다는 의미입니다.

정리

  • 기존 테이블에 고유 키를 추가하려면 ALTER TABLE ... ADD CONSTRAINT ... UNIQUE(...) 구문을 사용합니다.
  • 여러 컬럼을 조합한 복합 고유 키도 지정 가능합니다.
  • 테이블에 이미 중복 데이터가 존재하면 제약조건 추가가 실패하므로 사전에 중복 검사가 필요합니다.
  • DESC 명령으로 Key 컬럼의 “UNI” 표시를 통해 적용 여부를 확인할 수 있습니다.