이미 생성된 테이블에 고유 키(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” 표시를 통해 적용 여부를 확인할 수 있습니다.