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

MySQL에서 복합 고유 키(Composite Unique Key)를 구성하는 방법

MySQL에서 여러 컬럼을 조합해 고유한 복합 키(Composite Key)를 만들려면 ADD UNIQUE 명령어를 사용하면 됩니다. 이렇게 생성된 유니크 제약 조건은 지정한 컬럼들의 값 조합이 테이블 내에서 중복되지 않도록 보장합니다.

기본 문법

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

예제 테이블 생성

먼저 실습에 사용할 테이블을 생성해 보겠습니다. 다음 쿼리를 실행합니다.

mysql> CREATE TABLE makeCompositeKeyDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName varchar(40),
    -> StudentAge int,
    -> StudentGrade char(1)
    -> );
Query OK, 0 rows affected (2.34 sec)

위 테이블은 자동 증가하는 기본 키(Id)와 학생 이름(StudentName), 나이(StudentAge), 학년(StudentGrade) 컬럼으로 구성되어 있습니다.

테이블 구조 확인

DESC 명령어로 테이블 구조를 확인해 보겠습니다.

mysql> DESC makeCompositeKeyDemo;

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

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| Id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| StudentName  | varchar(40) | YES  |     | NULL    |                |
| StudentAge   | int(11)     | YES  |     | NULL    |                |
| StudentGrade | char(1)     | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
4 rows in set (1.65 sec)

현재는 Id 컬럼만 PRI(기본 키)로 설정되어 있고, 나머지 컬럼에는 어떤 키 제약도 없는 상태입니다.

복합 고유 키 추가하기

이제 StudentName, StudentAge, StudentGrade 세 컬럼을 조합한 복합 고유 키를 추가해 보겠습니다. 다음 쿼리를 실행합니다.

mysql> ALTER TABLE makeCompositeKeyDemo ADD UNIQUE
Name_Age_Grade(StudentName, StudentAge, StudentGrade);
Query OK, 0 rows affected (0.69 sec)
Records: 0 Duplicates: 0 Warnings: 0

여기서 Name_Age_Grade는 생성되는 유니크 인덱스의 이름입니다. 이 제약 조건이 적용되면 세 컬럼의 값 조합이 완전히 동일한 레코드는 더 이상 삽입할 수 없습니다. 예를 들어 '홍길동, 20세, A'라는 조합의 학생이 이미 있다면, 같은 조합을 가진 새 레코드는 에러와 함께 거부됩니다.

변경 후 테이블 구조 확인

복합 고유 키가 정상적으로 적용되었는지 다시 한번 테이블 구조를 확인해 보겠습니다.

mysql> DESC makeCompositeKeyDemo;

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

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| Id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| StudentName  | varchar(40) | YES  | MUL | NULL    |                |
| StudentAge   | int(11)     | YES  |     | NULL    |                |
| StudentGrade | char(1)     | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

결과 분석

변경 후 StudentName 컬럼의 Key 항목이 MUL로 표시된 것을 확인할 수 있습니다. MUL은 해당 컬럼이 복합(멀티 컬럼) 인덱스의 첫 번째 컬럼임을 의미합니다. MySQL은 DESC 출력에서 복합 인덱스의 첫 번째 컬럼에만 MUL을 표시하며, 나머지 컬럼들은 비워 두지만 실제로는 세 컬럼 모두 하나의 유니크 인덱스에 포함되어 있습니다.

이처럼 ALTER TABLE과 ADD UNIQUE를 활용하면 기존 테이블에도 손쉽게 복합 고유 키를 추가하여 데이터 무결성을 강화할 수 있습니다.