Maison > base de données > tutoriel mysql > Comment puis-je supprimer tous les enregistrements sauf les N derniers dans MySQL ?

Comment puis-je supprimer tous les enregistrements sauf les N derniers dans MySQL ?

Linda Hamilton
Libérer: 2025-01-08 16:31:48
original
894 Les gens l'ont consulté

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

Comment supprimer tous les enregistrements sauf les N derniers enregistrements en SQL

Il s'agit d'un problème courant : votre table est pleine d'enregistrements, mais vous souhaitez uniquement conserver les N derniers enregistrements et supprimer le reste. Bien que la requête que vous avez posée démontre l'intention, elle ne parvient pas à atteindre son objectif en raison des limitations de MySQL.

Ne vous inquiétez pas, des solutions existent ! La requête suivante permettra d'obtenir les résultats souhaités :

<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>
Copier après la connexion

Décomposition des requêtes :

  1. La cible de l'instruction DELETE est la table 'table', qui est utilisée pour supprimer des enregistrements.
  2. La clause WHERE exclut les enregistrements à supprimer en vérifiant si l'identifiant n'existe pas dans la sous-requête.
  3. La sous-requête sélectionne les N derniers enregistrements en triant les enregistrements par ordre décroissant (id DESC) et en limitant les résultats.
  4. La sous-requête intermédiaire (foo) est nécessaire pour atténuer les limitations de MySQL.

Restrictions contournées :

  • Les sous-requêtes intermédiaires empêchent "les erreurs dans la clause FROM mettant à jour la table cible" en isolant la sous-requête de l'opération DELETE.
  • Il évite également les erreurs "LIMIT & IN/ALL/ANY/SOME subquery" en utilisant une sous-requête de sous-requêtes.

Instructions d'optimisation :

En fonction de votre cas d'utilisation, la requête optimisée suivante peut être plus adaptée :

<code class="language-sql">DELETE FROM `table`
ORDER BY id DESC
LIMIT ROWS COUNT() - N -- 只保留最新的N条记录</code>
Copier après la connexion

Si elle répond à vos exigences, envisagez cette optimisation car elle peut améliorer considérablement les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal