Maison >base de données >tutoriel mysql >**Pourquoi MySQL DELETE avec LIMIT et Offset provoque-t-il une erreur ?**

**Pourquoi MySQL DELETE avec LIMIT et Offset provoque-t-il une erreur ?**

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 11:21:02299parcourir

**Why does MySQL DELETE with LIMIT and Offset Cause an Error?**

Erreur rencontrée lors de l'utilisation de l'instruction MySQL DELETE avec LIMIT

Problème :

Lors de la tentative de supprimez des lignes d'une table à l'aide d'une instruction MySQL DELETE avec une clause LIMIT, une erreur se produit au niveau de la valeur de décalage dans la clause LIMIT. La requête suivante illustre le problème :

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;

Le message d'erreur reçu à la valeur de décalage (50) est :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 50' at line 1

Solution :

L'erreur se produit car MySQL ne permet pas de spécifier un décalage dans la clause LIMIT d'une instruction DELETE. Par conséquent, nous devons recourir à une approche alternative pour obtenir le résultat souhaité.

Pour supprimer des lignes spécifiques d'une table en fonction d'une plage, nous pouvons utiliser une sous-requête imbriquée dans la requête DELETE principale. La requête modifiée suivante illustre cette technique :

<code class="sql">DELETE FROM `chat_messages` 
WHERE `id` IN (
    SELECT `id` FROM (
        SELECT `id` FROM `chat_messages`
        ORDER BY `timestamp` DESC
        LIMIT 20, 50
    ) AS `x`
)</code>

Dans cette requête, la sous-requête de la clause IN récupère les ID des lignes à supprimer en fonction de la plage spécifiée. En supposant que la table ait une colonne de clé primaire nommée id, nous pouvons l'utiliser pour identifier chaque ligne de manière unique.

Remarque : Il est important d'implémenter une double imbrication pour éviter les problèmes liés à l'incapacité de MySQL à sélectionner tableaux actuellement modifiés.

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