>  기사  >  데이터 베이스  >  MySQL에서 고유하지 않은 인덱스를 생성한 후 중복 레코드를 어떻게 수정할 수 있습니까?

MySQL에서 고유하지 않은 인덱스를 생성한 후 중복 레코드를 어떻게 수정할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-30 05:48:28246검색

How Can You Fix Duplicate Records After Creating a Non-Unique Index in MySQL?

고유 인덱스로 데이터 무결성 유지

데이터베이스에서 A, B, C, D 필드에 고유 인덱스를 생성하여 중복 레코드를 방지하는 것을 목표로 했습니다. 그러나 실수로 일반 인덱스를 대신 생성하여 중복 삽입이 발생했습니다. 2천만 개의 레코드가 위태로워지면 당연히 변경을 주저하게 됩니다.

고유 인덱스로 중복 레코드 처리

기존 인덱스를 고유 인덱스로 변경하거나 새 인덱스를 추가할 때, MySQL의 동작은 중복이 있는지 여부에 따라 달라집니다.

  • 일반 ALTER TABLE: 중복이 있으면 오류 1062(중복 키)로 인해 작업이 실패합니다.
  • IGNORE가 포함된 ALTER TABLE(MySQL 5.7.4 이전에만 해당): 중복을 제거하지만 어떤 행이 유지되는지 지정하지 않습니다.
  • MySQL 5.7.4 이상: IGNORE 절이 제거되고 이를 사용하면 오류가 발생합니다.

단계별 해결

MySQL 5.7.4 이상에서 이 문제를 해결하려면 다음 단계를 따르세요.

  1. 데이터를 임시 테이블에 복사합니다.
  2. 원본 테이블을 자릅니다.
  3. 원하는 열에 UNIQUE INDEX를 생성합니다.
  4. 복사 INSERT IGNORE를 사용하여 데이터를 원래 테이블로 되돌립니다.
  5. 임시 테이블을 삭제합니다.

이 방법은 나머지 데이터를 보존하면서 중복 항목을 효과적으로 제거합니다.

대체 솔루션 MySQL 5.7.4 이전

5.7.4 이전 MySQL 버전의 경우 ALTER TABLE 문의 IGNORE 절을 사용하여 보존할 행을 지정하지 않고 중복 항목을 제거할 수 있습니다. 그러나 이 작업을 시도하기 전에 데이터를 백업해 두는 것이 좋습니다.

위 내용은 MySQL에서 고유하지 않은 인덱스를 생성한 후 중복 레코드를 어떻게 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.