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

MySQL에서 레코드 존재 여부를 확인하고 존재할 경우 다른 값으로 덮어쓰는 방법

INSERT ON DUPLICATE KEY UPDATE로 중복 레코드 처리하기

MySQL에서 특정 항목이 이미 존재하는지 확인한 후, 존재할 경우 해당 열의 값을 다른 값으로 덮어쓰려면 INSERT ... ON DUPLICATE KEY UPDATE 구문을 사용하면 됩니다. 이 구문은 INSERT 실행 시 고유 키(UNIQUE KEY) 충돌이 발생하면 새 행을 추가하는 대신 자동으로 UPDATE를 수행합니다.

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

mysql> create table DemoTable1891
    (
    FirstName varchar(20),
    UNIQUE KEY(FirstName)
    );
Query OK, 0 rows affected (0.00 sec)

FirstName 열에 UNIQUE KEY가 설정되어 있으므로 동일한 이름의 중복 입력이 허용되지 않습니다. 이제 insert 명령으로 몇 개의 레코드를 삽입해 보겠습니다.

mysql> insert into DemoTable1891 values('Chris') on duplicate key update FirstName='Robert';
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1891 values('David') on duplicate key update FirstName='Robert';
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1891 values('Chris') on duplicate key update FirstName='Robert';
Query OK, 2 rows affected (0.00 sec)

세 번째 INSERT 문에서 'Chris'는 이미 테이블에 존재하기 때문에 새로운 행이 추가되지 않고, 대신 ON DUPLICATE KEY UPDATE 절에 따라 해당 행이 'Robert'로 업데이트됩니다. 이때 "2 rows affected"가 출력되는데, 이는 하나의 행이 업데이트되었음을 나타냅니다.

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

mysql> select * from DemoTable1891;

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

+-----------+
| FirstName |
+-----------+
| David     |
| Robert    |
+-----------+
2 rows in set (0.00 sec)

결과를 보면 처음에 삽입했던 'Chris'라는 값은 더 이상 존재하지 않습니다. 중복된 값('Chris')이 다시 삽입되려는 순간, ON DUPLICATE KEY UPDATE 절이 실행되어 해당 행이 'Robert'로 덮어써진 것입니다. 이처럼 INSERT ... ON DUPLICATE KEY UPDATE 구문을 활용하면 별도의 SELECT로 존재 여부를 확인하는 과정 없이 한 번의 쿼리로 중복 처리와 값 갱신을 동시에 수행할 수 있습니다.