>데이터 베이스 >MySQL 튜토리얼 >하나의 레코드를 유지하면서 MySQL에서 중복 행을 효율적으로 삭제하려면 어떻게 해야 합니까?

하나의 레코드를 유지하면서 MySQL에서 중복 행을 효율적으로 삭제하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-23 13:37:10696검색

How Can I Efficiently Delete Duplicate Rows in MySQL While Keeping One Record?

MySQL 중복 행 제거 가이드: 고유 레코드를 효율적으로 유지

이 문서에서는 MySQL 테이블에서 중복 데이터를 제거하고 각 중복 데이터 세트에서 하나의 레코드를 유지하는 방법을 설명합니다. SELECT DISTINCT를 사용하여 고유한 값을 필터링하는 것이 가능하지만 이 기사에서는 DELETE 명령을 사용하여 이를 달성하는 방법에 중점을 둡니다.

중요 팁:

우발적인 데이터 손실을 방지하려면 삭제 작업을 수행하기 전에 테이블을 백업하세요.

가장 작은 ID로 기록 유지:

중복 항목 중 ID가 가장 작은 행을 유지하려면 다음 SQL 문을 실행하세요.

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>

가장 큰 ID로 기록 유지:

중복 항목 중 ID가 가장 큰 행을 유지하려면 다음 SQL 문을 실행하세요.

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>

기타 참고사항:

효율성 경고:

위 방법은 효율적이지 않으며 데이터베이스 연결 과부하가 발생할 수 있습니다.

무결성 요구 사항:

AND n1.id < n2.id(또는 AND n1.id > n2.id) 절을 포함해야 합니다. 이 조건을 무시하면 테이블의 모든 행이 삭제될 수 있습니다.

대안:

더 나은 성능을 위해 다음 INSERTDISTINCT 쿼리 사용을 고려해 보세요.

<code class="language-sql">INSERT INTO tempTableName (cellId, attributeId, entityRowId, value)
SELECT DISTINCT cellId, attributeId, entityRowId, value
FROM tableName;</code>

그런 다음 원본 테이블을 삭제하고 임시 테이블의 이름을 바꿀 수 있습니다. 이 방법을 사용하면 데이터가 직접 삭제되는 것을 방지하여 효율성과 보안이 향상됩니다.

위 내용은 하나의 레코드를 유지하면서 MySQL에서 중복 행을 효율적으로 삭제하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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