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

MySQL 테이블에 존재하지 않는 레코드만 삽입하는 방법

MySQL에서 이미 존재하는 레코드의 중복 삽입을 방지하려면 해당 컬럼에 UNIQUE INDEX(고유 인덱스)를 설정해야 합니다. 고유 인덱스가 적용된 컬럼에는 동일한 값을 다시 삽입할 수 없으며, 중복 데이터가 들어올 경우 MySQL은 오류를 반환합니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

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

2. 고유 인덱스 생성

다음은 'FirstName' 컬럼에 고유 인덱스를 생성하여, 존재하지 않는 레코드만 삽입되도록 만드는 쿼리입니다.

mysql> CREATE UNIQUE INDEX index_on_FirstName ON DemoTable(FirstName);
Query OK, 0 rows affected (0.56 sec)
Records: 0 Duplicates: 0 Warnings: 0

3. 레코드 삽입 및 중복 확인

이제 INSERT 명령으로 레코드를 삽입합니다. 고유 인덱스 덕분에 INSERT 명령은 존재하지 않는 레코드만 정상적으로 삽입되며, 동일한 값이 다시 들어오면 오류가 발생합니다.

mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(FirstName) values('Chris');
ERROR 1062 (23000): Duplicate entry 'Chris' for key 'index_on_FirstName'
mysql>
mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.04 sec)

mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.04 sec)

mysql> insert into DemoTable(FirstName) values('Robert');
ERROR 1062 (23000): Duplicate entry 'Robert' for key 'index_on_FirstName'
mysql>

실행 결과를 보면 'Chris'와 'Robert'는 이미 테이블에 존재하기 때문에, 같은 값을 다시 삽입하려는 시도에서 ERROR 1062(중복 항목 오류)가 발생한 것을 확인할 수 있습니다.

4. 결과 확인

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

mysql> select *from DemoTable;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | Robert    |
|  3 | Mike      |
+----+-----------+
3 rows in set (0.00 sec)

추가 팁: INSERT IGNORE 활용하기

오류로 작업이 중단되는 것을 원하지 않는다면 INSERT IGNORE INTO ... 구문을 사용할 수 있습니다. 이 경우 중복 레코드 삽입 시 오류 대신 경고만 발생하고, 나머지 삽입 작업은 계속 진행됩니다. 배치(batch) 작업처럼 여러 레코드를 한 번에 처리할 때 특히 유용합니다.