중복 레코드를 방지하기 위한 일반적인 접근 방식은 관련 테이블 열에 고유 인덱스를 생성하는 것입니다. 그러나 최근의 실수로 인해 대신 일반 인덱스가 생성되어 대규모 2천만 개의 레코드 테이블 내에서 중복이 지속될 수 있게 되었습니다.
질문: 기존 인덱스를 고유하게 수정하거나 추가할 예정입니까? 해당 열에 대한 새로운 고유 인덱스는 중복 레코드를 제거합니다. 아니면 기존 고유 항목으로 인해 작업이 실패합니까?
답변:
IGNORE를 사용하여 고유 인덱스를 추가합니다. 수정자는 중복 레코드를 제거합니다.
<code class="sql">ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>
그러나 이 수정자는 MySQL 5.7.4 이상에서 더 이상 사용되지 않으므로 오류가 발생합니다. 이 문제를 방지하려면 다음 단계를 수행할 수 있습니다.
원래 테이블의 데이터를 보관할 임시 테이블을 만듭니다.
<code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable;</code>
원본 테이블 자르기:
<code class="sql">TRUNCATE TABLE mytable;</code>
원본 테이블에 고유 인덱스 만들기:
<code class="sql">ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>
데이터를 다시 복사 중복 행을 무시하고 원래 테이블에 추가:
<code class="sql">INSERT IGNORE INTO mytable SELECT * from tmp_data;</code>
임시 테이블 삭제:
<code class="sql">DROP TABLE tmp_data;</code>
또는 고유 인덱스 추가 IGNORE 수정자가 없으면 오류 1062(중복 키)로 인해 쿼리가 실패합니다.
위 내용은 **기존 색인을 고유 색인으로 수정하거나 새 색인을 추가하여 중복 레코드를 제거할 수 있습니까?**의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!