MySQL 인서트에서 중복 및 무시

MySQL 테이블 기본 키와 고유 인덱스는 같은 인덱스를 가진 여러 행이 테이블에 추가되는 것을 방지합니다. 표준 INSERT 문과 함께 중복 행을 삽입하려고하면 오류가 발생하고 삽입이 실패합니다.

MySQL은 표준 INSERT 문에 대한 몇 가지 대안을 제공하며 각각은 "INSERT IGNORE", "INSERT ... ON DUPLICATE KEY UPDATE"및 "REPLACE"와 같이 중복 행을 약간 다르게 처리합니다.

기본 키 및 고유 인덱스

기본 키 인덱스 및 "UNIQUE"인덱스 제약 조건은 모든 행이 인덱스 열에 고유 한 값을 포함하도록 요구하여 각 행이 기본 키 또는 UNIQUE 인덱스 제약 열의 값으로 식별되도록합니다.

일반 INSERT가 기본 키 또는 UNIQUE 제약 조건 인덱스에 중복 값이 ​​포함 된 행을 삽입하려고하면 삽입이 실패하고 전체 트랜잭션을 롤백 할 수 있습니다.

INSERT IGNORE

INSERT IGNORE는 INSERT와 같은 방법으로 행을 삽입하지만 중복 값이있는 행은 무시하고 오류없이 실행을 계속합니다. 중복 값이 ​​포함 된 행은 삽입되지 않습니다. 예 :

INSERT는 my_table에 무시합니다 (unique_index_column, other_column) VALUES (1, 'other value');

INSERT ... 중복 키 업데이트시

INSERT ... ON DUPLICATE KEY UPDATE는 비 중복 행을 정상적으로 삽입합니다. 그러나 중복 된 행을 발견하면 원래 행에서 UPDATE를 수행합니다. 예 :

INSERT INTO my_table (unique_index_column, other_column) VALUES (1, 'other value') 중복 키 업데이트에 other_column = '중복 업데이트 값';

바꾸다

REPLACE는 중복 행을 만날 때 원래 행을 삭제 한 다음 삽입을 계속한다는 점을 제외하면 INSERT와 동일하게 작동합니다. 고유 인덱스 값이 중복 된 행은 원래 값을 포함하는 행을 대체합니다. 예 :

REFACE INTO my_table (unique_index_column, other_column) VALUES (1, 'other value')

인기 게시물