2012-10-08 4 views
15

Gibt es einen SQL-Befehl zum Löschen der ersten X-Zeilen einer Datenbanktabelle?Löschen erster X-Zeilen einer Datenbank

Ich habe eine Datenbanktabelle mit einigen Informationen, aber keine ID oder Auto-Inkrementierung Wert und ein Programm, das die ersten X Zeilen dieser Tabelle verarbeitet. Danach müssen diese X Zeilen gelöscht werden. So ist die Standardabfrage ist:

DELETE FROM table WHERE something = value; 

So gibt es eine Möglichkeit, eine Abfrage wie zu bauen:

DELETE FROM table WHERE rownumber <= X; 

ich diesen Befehl versucht, aber es passiert nichts mit der Datenbank .. Haben Sie irgendeine Ahnung?

Antwort

33

Verwenden LIMIT auf Ihrem löschen:

DELETE FROM table WHERE condition LIMIT 10 

Oder, wenn Sie die Bedingung nicht

DELETE FROM table LIMIT 10 

Denken Sie daran, möchten, dass die Reihenfolge, in der ist nicht definiert, werden Zeilen gelöscht - es hängt davon ab, Ihre DBMS-Konfiguration und Tabellenindizes. Sie sollten eine ORDER BY einschließen, so dass die Löschung in einer definierten Reihenfolge erfolgt, z. ORDER BY id ASC, um zuerst die niedrigsten IDs zu löschen.

Siehe die MySQL documentation for DELETE für weitere Details.

+1

Seien Sie sehr vorsichtig, wenn Sie dies tun. Die Reihenfolge der Auswahl kann sich ändern, wenn Sie einen Index oder etwas Ähnliches hinzufügen. Der SQL-Server macht die einfachste Auswahl, die er finden kann, wenn er keine Where-Klausel hinzufügt. – Romo

+0

Das ist richtig. Es gelten die üblichen 'ORDER BY' Anforderungen. Ich habe das bearbeitet, um das zu reflektieren. – Polynomial

+0

Danke für deine Antwort! Ich habe das versucht und es funktioniert leider nur, wenn eine Bedingung gegeben ist. So verwende ich jetzt 'DELETE FROM Tabelle WHERE a_field> 0 LIMIT X;' Dies funktioniert so weit. Danke :-) – coroner