web-dev-qa-db-fra.com

Comment supprimer une plage d'enregistrements à la fois sur MySQL?

J'ai des lignes de plus de 60000 dans mon tableau. Comment puis-je supprimer des lignes de 40000 à 50000 à la fois?

36
user994535

Vous pouvez utiliser la fonction between

delete from exampleTable where id between 40000 and 50000

ou:

delete from exampleTable where id >= 40000 and id <= 50000

assez simple?

74
Yoram de Langen

Je suppose que vous voulez le faire en fonction de l'ordre par défaut de la table et que vous ne disposez pas d'une clé naturelle ou d'une autre manière de les classer dans les données de la table. 

C'est à dire. SELECT * FROM WORDS renvoie:

Hi
Hello
Bye
Goodbye
What's up

Donc, si vous avez dit que vous vouliez supprimer les lignes 2 à 4, voulez-vous supprimer Hello, Bye, and Goodbye. Droite? 

L'ordre de retour de votre table est-il déterministe? En d'autres termes, vous obtenez les résultats dans le même ordre à chaque fois? Dans l'idéal, vous seriez en mesure d'identifier une colonne de votre table contenant des données sur lesquelles vous pourriez vous appuyer, ce qui vous permettrait d'utiliser la réponse de Tricker. 

Si ce n'est pas le cas, vous devrez utiliser le numéro de ligne pour votre instruction entre. Je ne suis pas un utilisateur de MySQL, le code ci-dessous serait sans doute plus propre si je l'étais. De plus, je n'ai même pas de base de données mysql pour tester la requête. J'ai mis en place une instruction SQL en utilisant ce post comme référence pour savoir comment obtenir un numéro de ligne dans mysql. Avec MySQL, comment puis-je générer une colonne contenant l'index d'enregistrement dans une table?

Ma requête suppose que vous avez une sorte de clé primaire sur votre table. Sinon, il n'y a aucun moyen de garantir que vous ne supprimerez pas les lignes superflues, en plus de la bonne conception de la table. 

DELETE FROM YOUR_TABLE 
WHERE primarykey = 
(SELECT  primarykey FROM 
   (SELECT t.primarykey, 
           @curRow := @curRow + 1 AS row_number
   FROM    YOUR_TABLE t
   JOIN    (SELECT @curRow := 0) r) 
WHERE row_number between 40000 and 50000);
3
Evan

Si vous ne possédez pas de clé primaire et que vous voulez supprimer par nombre de lignes dans la plage de lignes, .__, vous pouvez le faire via l'importation mysql Effectuez une exportation personnalisée - Spécifiez la ligne de départ et le nombre . Dans votre cas, vous aurez besoin de deux exportations: une pour les lignes 0 - 40k, la seconde pour 50 dernières . Importez ensuite ces deux fichiers dans the table . Remarque: Si l’importation de gros fichiers pose problème, je recommande BigDump. http://www.ozerov.de/bigdump/

0
A programmer

Table: épicerie

article d'identification

1 riz 2 savon 3 riz 4 riz

SUPPRIMER DE 'épicerie' OERE item = "riz" LIMITE 2;

C'est plus facile que toutes les idées. pour cet élément particulier, il existe 2 enregistrements pouvant être supprimés.

Et la réponse est

2 lignes supprimées.

SELECT * FROM épicerie;

article d'identification

1 riz 2 savon

0
varshini