> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 N개의 최신 레코드를 제외한 모든 레코드를 어떻게 삭제할 수 있습니까?

MySQL에서 N개의 최신 레코드를 제외한 모든 레코드를 어떻게 삭제할 수 있습니까?

Linda Hamilton
풀어 주다: 2025-01-08 16:31:48
원래의
892명이 탐색했습니다.

How Can I Delete All But the N Latest Records in MySQL?

SQL에서 최신 N개 레코드를 제외한 모든 레코드를 삭제하는 방법

이것은 일반적인 문제입니다. 테이블이 레코드로 가득 차 있는데 최신 N개 레코드만 유지하고 나머지는 삭제하려고 합니다. 귀하가 요청한 쿼리는 의도를 보여 주지만 MySQL의 한계로 인해 목적을 달성하지 못합니다.

걱정하지 마세요. 해결책이 있습니다! 다음 쿼리를 사용하면 원하는 결과를 얻을 수 있습니다.

<code class="language-sql">DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT N -- 保留最新的N条记录
  ) foo
);</code>
로그인 후 복사

쿼리 분해:

  1. DELETE 문의 대상은 레코드를 삭제하는 데 사용되는 '테이블' 테이블입니다.
  2. WHERE 절은 하위 쿼리에 해당 ID가 존재하지 않는지 확인하여 삭제할 레코드를 제외합니다.
  3. 하위 쿼리는 레코드를 내림차순(ID DESC)으로 정렬하고 결과를 제한하여 최신 N개 레코드를 선택합니다.
  4. MySQL 제한 사항을 완화하려면 중간 하위 쿼리(foo)가 필요합니다.

제한 우회:

  • 중간 하위 쿼리는 DELETE 작업에서 하위 쿼리를 분리하여 "대상 테이블을 업데이트하는 FROM 절의 오류"를 방지합니다.
  • 또한 하위 쿼리 중의 하위 쿼리를 사용하여 "LIMIT & IN/ALL/ANY/SOME 하위 쿼리" 오류를 방지합니다.

최적화 지침:

사용 사례에 따라 다음과 같은 최적화된 쿼리가 더 적합할 수도 있습니다.

<code class="language-sql">DELETE FROM `table`
ORDER BY id DESC
LIMIT ROWS COUNT() - N -- 只保留最新的N条记录</code>
로그인 후 복사

귀하의 요구 사항을 충족하는 경우 성능을 크게 향상시킬 수 있으므로 이 최적화를 고려하십시오.

위 내용은 MySQL에서 N개의 최신 레코드를 제외한 모든 레코드를 어떻게 삭제할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿