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

MySQL ALTER TABLE로 고유(UNIQUE) 제약 조건 추가하는 방법

MySQL에서 고유 제약 조건이란?

데이터베이스를 설계할 때 특정 컬럼 또는 여러 컬럼의 조합에 중복된 값이 저장되지 않도록 해야 하는 경우가 자주 있습니다. 이럴 때 사용하는 것이 바로 고유(UNIQUE) 제약 조건입니다. MySQL에서는 ALTER TABLE 문을 사용해 이미 생성된 테이블에도 고유 인덱스를 손쉽게 추가할 수 있습니다.

이번 글에서는 예제 테이블을 만들고, 두 개의 컬럼(FirstName, LastName) 조합에 고유 제약 조건을 추가한 뒤, 실제로 중복 데이터가 어떻게 처리되는지 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 테스트에 사용할 테이블을 생성합니다. 이름과 성을 저장하는 간단한 구조입니다.

mysql> create table DemoTable1811
    (
    FirstName varchar(20),
    LastName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. ALTER TABLE로 고유 인덱스 추가

테이블이 준비되었다면 ALTER TABLE ... ADD UNIQUE 문법으로 고유 인덱스를 추가합니다. 아래 쿼리는 FirstName과 LastName의 조합이 중복되지 않도록 복합 고유 인덱스를 생성합니다.

mysql> alter table DemoTable1811 ADD UNIQUE unique_index_first_last_name(FirstName, LastName);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

여기서 unique_index_first_last_name은 인덱스의 이름으로, 나중에 오류 메시지나 인덱스 관리 시 이 이름을 참조하게 됩니다.

3. 데이터 삽입 및 중복 확인

이제 INSERT 명령으로 몇 개의 레코드를 추가해 보겠습니다.

mysql> insert into DemoTable1811 values('John','Smith');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1811 values('John','Doe');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1811 values('Adam','Smith');
Query OK, 1 row affected (0.00 sec)

그런데 동일한 값인 ('John', 'Doe')을 다시 삽입하면 어떻게 될까요?

mysql> insert into DemoTable1811 values('John','Doe');
ERROR 1062 (23000): Duplicate entry 'John-Doe' for key 'unique_index_first_last_name'

위와 같이 ERROR 1062 (Duplicate entry) 오류가 발생하며 삽입이 거부됩니다. 이는 앞서 추가한 고유 제약 조건이 정상적으로 작동하고 있다는 의미입니다. 참고로 이름만 같거나 성만 같은 경우는 허용되며, 두 컬럼의 조합 전체가 동일할 때만 중복으로 판단됩니다.

4. 결과 조회

SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select * from DemoTable1811;

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

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam      |    Smith |
| John      |     Doe |
| John      |    Smith |
+-----------+----------+
3 rows in set (0.00 sec)

중복 삽입이 시도되었던 ('John', 'Doe') 레코드는 하나만 저장되어 있고, 총 3개의 행만 존재하는 것을 확인할 수 있습니다.

정리

  • ALTER TABLE 테이블명 ADD UNIQUE 인덱스명(컬럼1, 컬럼2); 형식으로 기존 테이블에 고유 제약 조건을 추가할 수 있습니다.
  • 여러 컬럼을 지정하면 해당 컬럼들의 조합 기준으로 중복 여부가 검사됩니다.
  • 중복 데이터 삽입 시 ERROR 1062(Duplicate entry) 오류가 발생하여 데이터 무결성이 보장됩니다.

이처럼 고유 제약 조건을 활용하면 애플리케이션 로직에 의존하지 않고도 데이터베이스 차원에서 중복 데이터를 확실하게 방지할 수 있습니다.