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>
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>
La sous-requête imbriquée est cruciale. Sans cela, vous rencontrerez des erreurs telles que :
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!