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

MySQL에서 중복 INSERT를 방지하는 방법 완벽 가이드

MySQL에서 동일한 데이터가 여러 번 저장되는 것을 막고 싶다면 UNIQUE INDEX(고유 인덱스)를 활용하면 됩니다. 고유 인덱스를 설정하면 지정한 컬럼 조합에 대해 중복된 값의 입력이 차단됩니다.

1. UNIQUE INDEX 추가하기

기본 문법은 다음과 같습니다.

ALTER TABLE 테이블명 ADD UNIQUE INDEX(컬럼명1, 컬럼명2, ....N);

2. 실습용 테이블 생성

먼저 예제로 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
    -> (
    -> Value1 int,
    -> Value2 int
    -> );
Query OK, 0 rows affected (0.55 sec)

3. 고유 인덱스 적용

다음 쿼리로 Value1과 Value2 두 컬럼 조합에 고유 인덱스를 추가합니다.

mysql> alter table DemoTable ADD UNIQUE INDEX(Value1, Value2);
Query OK, 0 rows affected (0.54 sec)
Records: 0  Duplicates: 0  Warnings: 0

4. INSERT IGNORE로 중복 데이터 처리하기

데이터를 삽입할 때는 일반적인 INSERT 대신 INSERT IGNORE 명령어를 사용하는 것이 핵심입니다.

INSERT IGNORE의 동작 방식:

  • 삽입하려는 레코드가 기존 레코드와 중복되지 않으면 → 정상적으로 저장됩니다.
  • 삽입하려는 레코드가 이미 존재하는 경우 → 에러를 발생시키지 않고 해당 레코드를 조용히 무시합니다.
mysql> insert ignore into DemoTable values(10,20);
Query OK, 1 row affected (0.14 sec)

mysql> insert ignore into DemoTable values(10,20);
Query OK, 0 rows affected, 1 warning (0.10 sec)

위 실행 결과를 보면, 첫 번째 INSERT에서는 (10, 20) 데이터가 정상적으로 1행 저장되었지만, 두 번째 INSERT에서는 동일한 값이므로 새로운 행이 추가되지 않은 것을 확인할 수 있습니다.

5. 결과 확인

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

mysql> select *from DemoTable;

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

+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     10 |     20 |
+--------+--------+
1 row in set (0.00 sec)

(10, 20) 값을 두 번 삽입했음에도 불구하고 최종적으로 저장된 레코드는 단 하나뿐입니다. 이처럼 UNIQUE INDEX + INSERT IGNORE 조합을 사용하면 에러 없이 깔끔하게 중복 입력을 방지할 수 있습니다.

추가 팁: ON DUPLICATE KEY UPDATE

중복 시 단순히 무시하는 것이 아니라 기존 데이터를 업데이트하고 싶다면 ON DUPLICATE KEY UPDATE 구문을 사용할 수도 있습니다. 상황에 따라 IGNORE와 UPDATE 방식을 선택하여 활용하면 됩니다.