Maison >base de données >tutoriel mysql >Comment supprimer un nombre spécifique de lignes par ordre décroissant dans MySQL avec des restrictions ?

Comment supprimer un nombre spécifique de lignes par ordre décroissant dans MySQL avec des restrictions ?

DDD
DDDoriginal
2024-10-28 11:54:41599parcourir

How to Delete a Specific Number of Rows in Descending Order in MySQL with Restrictions?

Suppression de lignes avec des restrictions dans MySQL

Cette question explore l'utilisation de l'instruction DELETE avec la clause LIMIT dans MySQL. L'utilisateur tente de supprimer un nombre spécifié de lignes par ordre décroissant en fonction de la colonne d'horodatage. Cependant, la requête échoue avec une erreur de syntaxe.

L'erreur survient car MySQL n'autorise pas les décalages dans la clause LIMIT d'une instruction DELETE. Par conséquent, la requête ne peut pas être exécutée comme prévu.

Pour résoudre ce problème, la requête peut être réécrite en utilisant une approche différente. La requête réécrite utilise des sous-requêtes imbriquées pour sélectionner les lignes à supprimer en fonction de la plage souhaitée.

DELETE FROM `chat_messages` 
WHERE `id` IN (
    SELECT `id` FROM (
        SELECT `id` FROM `chat_messages`
        ORDER BY `timestamp` DESC
        LIMIT 20, 50
    ) AS `x`
)

Dans cette requête modifiée, une sous-requête imbriquée sélectionne les valeurs d'identifiant des lignes à supprimer. La clause LIMIT est appliquée à la sous-requête la plus interne pour restreindre l'ensemble de résultats.

Étant donné que MySQL interdit la sélection à partir d'une table actuellement modifiée, la requête utilise une double imbrication pour contourner cette limitation. La sous-requête externe sert de table temporaire, permettant à la sous-requête la plus interne de sélectionner les valeurs d'identifiant dans un ensemble de résultats distinct.

En implémentant cette technique, la requête peut supprimer avec succès des lignes dans la plage spécifiée tout en respectant les exigences de syntaxe de MySQL. .

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!

Déclaration:
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