MySQL에서는 ALTER TABLE 문과 ADD 키워드를 함께 사용하면 이미 생성된 테이블의 여러 열에 PRIMARY KEY(기본 키) 제약 조건을 추가할 수 있습니다. 이처럼 두 개 이상의 열을 조합해 구성한 기본 키를 복합 기본 키(Composite Primary Key)라고 부르며, 각 열 단위가 아닌 열 값들의 조합 전체가 테이블 내에서 유일해야 한다는 점이 특징입니다.
예제
다음과 같은 'Room_allotment' 테이블이 있다고 가정해 보겠습니다.
mysql> Create table Room_allotment(Id Int, Name Varchar(20), RoomNo Int); Query OK, 0 rows affected (0.20 sec) mysql> Describe Room_allotment; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | Id | int(11) | YES | | NULL | | | Name | varchar(20) | YES | | NULL | | | RoomNo | int(11) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.11 sec)
현재 세 개의 열 모두 Key 항목이 비어 있는 상태, 즉 기본 키가 없는 상태입니다. 이제 다음 쿼리를 실행하면 'Id'와 'Name' 두 열에 복합 PRIMARY KEY를 한 번에 추가할 수 있습니다.
mysql> Alter Table Room_allotment ADD PRIMARY KEY(Id, Name); Query OK, 0 rows affected (0.29 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> Describe Room_allotment; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | Id | int(11) | NO | PRI | 0 | | | Name | varchar(20) | NO | PRI | | | | RoomNo | int(11) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.12 sec)
결과 확인
위 결과 집합을 보면 'Id' 열과 'Name' 열의 Key 항목이 모두 PRI로 표시된 것을 확인할 수 있습니다. 이는 두 열에 성공적으로 복합 기본 키가 설정되었음을 의미합니다.
또한 기본 키가 적용된 열은 다음과 같이 자동으로 변경됩니다.
- Null 허용 여부: YES에서 NO로 변경되어 NULL 값을 저장할 수 없게 됩니다.
- Default 값: 숫자형 열은 0, 문자형 열은 빈 문자열('')로 기본값이 지정됩니다.
복합 기본 키 사용 시 주의 사항
- 'Id'와 'Name'의 조합이 유일하기만 하면 되므로, 예를 들어 (1, '홍길동')과 (2, '홍길동')처럼 개별 열의 값이 중복되더라도 저장이 가능합니다.
- 기존 데이터에 NULL 값이나 중복된 조합이 있으면 ALTER TABLE 문이 실패하므로, 제약 조건을 추가하기 전에 데이터를 먼저 정리해야 합니다.
- 테이블당 PRIMARY KEY는 하나만 존재할 수 있으며, 이미 기본 키가 설정된 테이블에는 먼저 기존 키를 삭제(DROP PRIMARY KEY)한 후 새로 추가해야 합니다.