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

MySQL에서 두 열의 조합을 UNIQUE로 만드는 방법 완벽 정리

MySQL에서 두 개 이상의 열을 하나의 그룹으로 묶어 고유한 값 조합을 강제하고 싶다면 ALTER TABLE 명령어와 UNIQUE 제약 조건을 함께 사용하면 됩니다. 복합 유니크 키(composite unique key)라고도 불리는 이 기능은, 예를 들어 '이름 + 전화번호'처럼 각각은 중복될 수 있지만 두 값의 조합 자체는 중복되면 안 되는 경우에 매우 유용합니다.

기본 문법

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

제약 조건 이름을 직접 지정할 수 있으며, 괄호 안에 나열된 열들의 조합이 테이블 전체에서 유일해야 한다는 규칙이 적용됩니다.

1단계: 예제 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> CREATE TABLE DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(100),
    StudentLastName varchar(100),
    StudentAge int,
    StudentPhoneNumber varchar(20)
);
Query OK, 0 rows affected (0.81 sec)

2단계: 두 열에 UNIQUE 제약 조건 추가

이제 StudentFirstNameStudentPhoneNumber 두 열의 조합을 고유하게 만들어 보겠습니다.

mysql> ALTER TABLE DemoTable ADD UNIQUE DemoTable_unique_StudentFirstName_StudentPhoneNumber(StudentFirstName, StudentPhoneNumber);
Query OK, 0 rows affected (0.40 sec)
Records: 0 Duplicates: 0 Warnings: 0

명령이 성공적으로 실행되면, 이후부터는 같은 이름이라도 전화번호가 다르면 저장할 수 있지만, 이름과 전화번호가 모두 동일한 데이터는 입력할 수 없게 됩니다.

3단계: 데이터 삽입으로 동작 확인

레코드를 몇 개 삽입해 보겠습니다.

mysql> INSERT INTO DemoTable(StudentFirstName, StudentLastName, StudentAge, StudentPhoneNumber) VALUES('John','Doe',21,'9878567878');
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO DemoTable(StudentFirstName, StudentLastName, StudentAge, StudentPhoneNumber) VALUES('John','Smith',23,'7654674545');
Query OK, 1 row affected (0.14 sec)

첫 번째와 두 번째 레코드는 이름이 'John'으로 같지만 전화번호가 다르므로 정상적으로 삽입됩니다. 하지만 이름과 전화번호가 모두 첫 번째 레코드와 동일한 데이터를 삽입하면 어떻게 될까요?

mysql> INSERT INTO DemoTable(StudentFirstName, StudentLastName, StudentAge, StudentPhoneNumber) VALUES('John','Brown',21,'9878567878');
ERROR 1062 (23000): Duplicate entry 'John-9878567878' for key 'DemoTable_unique_StudentFirstName_StudentPhoneNumber'

'John-9878567878' 조합이 이미 존재하기 때문에 ERROR 1062 (Duplicate entry) 오류가 발생하며 삽입이 거부됩니다. 이것이 바로 복합 UNIQUE 제약 조건이 정상적으로 작동하고 있다는 증거입니다.

4단계: 최종 결과 확인

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM DemoTable;

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

+-----------+------------------+-----------------+------------+---------------------+
| StudentId | StudentFirstName | StudentLastName | StudentAge | StudentPhoneNumber  |
+-----------+------------------+-----------------+------------+---------------------+
|         1 | John             | Doe             | 21         | 9878567878          |
|         2 | John             | Smith           | 23         | 7654674545          |
+-----------+------------------+-----------------+------------+---------------------+
2 rows in set (0.00 sec)

정리

이처럼 MySQL에서 여러 열의 조합에 고유성을 부여하는 것은 ALTER TABLE ... ADD UNIQUE 구문 하나로 간단하게 처리할 수 있습니다. 핵심 포인트를 요약하면 다음과 같습니다.

- 개별 열이 아니라 열 조합 전체가 유일성 검사의 대상이 됩니다.
- 이미 중복된 데이터가 있는 상태에서 제약 조건을 추가하면 오류가 발생하므로, 적용 전에 데이터 정합성을 먼저 점검해야 합니다.
- NULL 값은 유니크 검사에서 서로 다른 값으로 취급되므로, 필요하다면 해당 열을 NOT NULL로 설정하는 것이 좋습니다.