Maison > base de données > tutoriel mysql > Comment supprimer efficacement tous les enregistrements sauf les N les plus récents dans MySQL ?

Comment supprimer efficacement tous les enregistrements sauf les N les plus récents dans MySQL ?

Mary-Kate Olsen
Libérer: 2025-01-08 16:17:41
original
394 Les gens l'ont consulté

How to Efficiently Delete All but the N Most Recent Records in MySQL?

MySQL : supprimer toutes les entrées sauf les N les plus récentes

La gestion des bases de données nécessite souvent de supprimer les enregistrements les plus anciens tout en préservant les plus récents. Ceci peut être réalisé dans MySQL en utilisant une requête SQL intelligente sans compter sur des variables.

Une tentative courante, mais imparfaite, est :

<code class="language-sql">DELETE FROM table ORDER BY id ASC LIMIT ((SELECT COUNT(*) FROM table) - N);</code>
Copier après la connexion

Cette approche échoue en raison des limitations de l'instruction DELETE de MySQL.

Une solution robuste implique une sous-requête imbriquée :

<code class="language-sql">DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT 42 -- Replace 42 with the number of records to keep (N)
  ) as recent_records
);</code>
Copier après la connexion

La sous-requête imbriquée est cruciale. Sans cela, vous rencontrerez des erreurs telles que :

  • Erreur SQL (1093) : Vous ne pouvez pas modifier une table que vous sélectionnez dans la même requête.
  • Erreur SQL (1235) : L'utilisation de LIMIT directement dans une sous-requête NOT IN est interdite.

Cette requête structurée contourne efficacement ces restrictions, en supprimant avec succès tous les enregistrements récents sauf le nombre spécifié (défini par la clause LIMIT). N'oubliez pas de remplacer 42 par la valeur souhaitée de N.

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