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

MySQL 테이블에 중복되지 않은 값만 삽입하는 방법 (UNIQUE 제약 조건 활용)

MySQL에서 테이블에 중복된 값의 삽입을 방지하려면 UNIQUE 제약 조건을 사용해야 합니다. UNIQUE 제약 조건을 설정하면 해당 컬럼(또는 컬럼 조합)에 이미 존재하는 값과 동일한 데이터를 삽입할 때 데이터베이스가 자동으로 오류를 발생시켜 중복 저장을 막아줍니다.

1. UNIQUE 제약 조건이 있는 테이블 생성

먼저 FirstName과 LastName 두 컬럼의 조합에 대해 UNIQUE 제약 조건을 적용한 테이블을 생성해 보겠습니다.

mysql> create table DemoTable832(
    FirstName varchar(100),
    LastName varchar(100),
    UNIQUE(FirstName,LastName)
);
Query OK, 0 rows affected (0.87 sec)

위 예제에서는 두 컬럼을 함께 묶어 UNIQUE로 지정했기 때문에, 이름과 성의 조합 전체가 동일한 경우에만 중복으로 판단됩니다.

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

이제 INSERT 명령문을 사용하여 몇 개의 레코드를 삽입해 보겠습니다.

mysql> insert into DemoTable832 values('John','Smith');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable832 values('Adam','Smith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable832 values('John','Doe');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable832 values('John','Smith');
ERROR 1062 (23000): Duplicate entry 'John-Smith' for key 'FirstName'

앞의 세 번의 삽입은 정상적으로 처리되었지만, 마지막에 이미 존재하는 ('John', 'Smith') 조합을 다시 삽입하려고 하자 다음과 같은 오류가 발생했습니다.

  • ERROR 1062 (23000): 중복 항목 오류 코드
  • Duplicate entry 'John-Smith': 'John-Smith'라는 조합이 이미 존재한다는 의미

이처럼 UNIQUE 제약 조건 덕분에 중복 데이터가 테이블에 저장되지 않고 즉시 차단됩니다.

3. 저장된 데이터 확인

SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable832;

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

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

결과를 보면 총 3개의 레코드만 저장되어 있으며, 중복 시도였던 네 번째 ('John', 'Smith') 데이터는 포함되어 있지 않습니다.

정리

UNIQUE 제약 조건은 단일 컬럼뿐만 아니라 여러 컬럼의 조합에도 적용할 수 있습니다. 이를 활용하면 응용 프로그램 수준의 검증 없이도 데이터베이스 차원에서 데이터 무결성을 보장할 수 있어, 회원 정보나 고유 식별 데이터를 관리할 때 매우 유용합니다.