이미 생성된 MySQL 테이블의 특정 컬럼에 PRIMARY KEY(기본 키) 제약 조건을 적용하려면 ALTER TABLE 문을 사용하면 됩니다. 테이블을 새로 만들 필요 없이 기존 구조를 간단히 수정할 수 있다는 점이 큰 장점입니다.
기본 문법
ALTER TABLE table_name MODIFY column_name datatype PRIMARY KEY;
또는
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
두 가지 방식 모두 동일한 결과를 가져오며, 상황에 따라 편한 방법을 선택하면 됩니다. MODIFY 구문은 컬럼의 데이터 타입을 함께 지정해야 하고, ADD PRIMARY KEY 구문은 컬럼 이름만 명시하면 되므로 더 간결합니다.
적용 예시
다음과 같은 'Player' 테이블이 있다고 가정해 보겠습니다. 현재 'ID' 컬럼에는 어떠한 키 제약 조건도 설정되어 있지 않습니다.
mysql> DESCRIBE Player;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID | int(11) | YES | | NULL | |
| Name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)
이제 ALTER TABLE 명령어를 사용해 'ID' 컬럼에 PRIMARY KEY 제약 조건을 추가해 보겠습니다.
mysql> ALTER TABLE Player MODIFY ID INT PRIMARY KEY;
Query OK, 0 rows affected (0.22 sec)
Records: 0 Duplicates: 0 Warnings: 0
명령 실행 후 테이블 구조를 다시 확인하면 다음과 같습니다.
mysql> DESCRIBE Player;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID | int(11) | NO | PRI | NULL | |
| Name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)
결과 확인
위 결과 집합을 보면 'ID' 컬럼의 Key 항목이 PRI로, Null 항목이 NO로 변경된 것을 확인할 수 있습니다. 이는 MySQL이 해당 컬럼에 PRIMARY KEY 제약 조건을 성공적으로 적용했음을 의미합니다. 기본 키가 설정된 컬럼에는 중복 값과 NULL 값이 허용되지 않습니다.
또한 다음과 같은 쿼리로도 동일하게 PRIMARY KEY 제약 조건을 추가할 수 있습니다.
ALTER TABLE Player ADD PRIMARY KEY(ID);
주의 사항
기존 테이블에 PRIMARY KEY를 추가할 때는 해당 컬럼에 이미 중복된 값이나 NULL 값이 존재하면 제약 조건 적용이 실패합니다. 따라서 제약 조건을 추가하기 전에 데이터를 먼저 정리해 두는 것이 좋습니다. 또한 하나의 테이블에는 PRIMARY KEY가 하나만 존재할 수 있으며, 여러 컬럼을 조합한 복합 기본 키(composite primary key)도 ADD PRIMARY KEY (col1, col2) 형태로 설정할 수 있습니다.