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

MySQL INSERT 시 중복 행 방지 방법 – UNIQUE KEY와 INSERT IGNORE 활용하기

MySQL에서 INSERT 작업 시 특정 컬럼에 중복된 값이 저장되는 것을 방지하려면 해당 컬럼에 UNIQUE KEY(고유 키)를 설정해야 합니다. 고유 키가 적용된 컬럼에는 동일한 값을 가진 행이 두 번 이상 저장될 수 없습니다.

1. 테이블 생성 및 UNIQUE KEY 설정

먼저 FirstName 컬럼에 UNIQUE KEY를 설정하여 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(30),
    UNIQUE KEY(FirstName)
);
Query OK, 0 rows affected (1.76 sec)

2. INSERT IGNORE로 레코드 삽입

이제 insert 명령어를 사용해 테이블에 레코드를 삽입합니다. 여기서는 의도적으로 'David'와 같은 중복 레코드도 함께 삽입해 보겠습니다. 하지만 FirstName 컬럼에 UNIQUE KEY가 설정되어 있기 때문에 동일한 이름은 두 번 저장되지 않습니다.

mysql> insert ignore into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.42 sec)
mysql> insert ignore into DemoTable(FirstName) values('David');
Query OK, 1 row affected (0.12 sec)
mysql> insert ignore into DemoTable(FirstName) values('Chris');
Query OK, 0 rows affected, 1 warning (0.17 sec)
mysql> insert ignore into DemoTable(FirstName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert ignore into DemoTable(FirstName) values('David');
Query OK, 0 rows affected, 1 warning (0.07 sec)

여기서 주목할 점은 중복된 값('Chris', 'David')을 삽입할 때 쿼리가 에러로 실패하지 않고 "0 rows affected, 1 warning" 메시지와 함께 조용히 무시된다는 것입니다. 이는 INSERT IGNORE 구문 덕분입니다. 만약 일반적인 INSERT 문을 사용했다면 중복 키 오류(duplicate entry error)가 발생하여 쿼리 자체가 실패하게 됩니다.

3. 결과 확인

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

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | David     |
|  4 | Sam       |
+----+-----------+
3 rows in set (0.00 sec)

결과를 보면 Chris와 David가 각각 한 번씩만 저장되어 있으며, 중복 삽입 시도는 모두 무시되었음을 확인할 수 있습니다. 참고로 중복 삽입이 거부되더라도 AUTO_INCREMENT 값은 계속 증가하기 때문에 Id가 1, 2, 4처럼 건너뛰어 나타나게 됩니다.

참고: ON DUPLICATE KEY UPDATE

중복 데이터 발생 시 단순히 무시하는 대신 기존 레코드를 업데이트하고 싶다면 ON DUPLICATE KEY UPDATE 구문을 활용할 수 있습니다. 상황에 따라 INSERT IGNORE와 ON DUPLICATE KEY UPDATE 중 적절한 방식을 선택하면 됩니다.