2013-03-19 27 views
35

Jestem Administrator Linux tylko wiedzy podstawowej w MySQL QueriesUsuń wiele wierszy z tabeli przy użyciu identyfikatora w MySQL

Chcę usunąć wiele wpisów w tabeli, które mają adres ip z mojego stołu za pomocą id,

obecnie używam

DELETE from tablename where id=1; 
DELETE from tablename where id=2; 

ale muszę usunąć 254 wpisów, więc metoda ta będzie trwać wiele godzin, jak mogę powiedzieć, MySQL, aby usunąć wiersze, które mogę określić, bo chcę pominąć usuwając niektóre wpisy z tego 254.

Usuwanie całej tabeli i importowanie potrzebnych wpisów nie jest opcją.

+1

id to numer, więc coś w stylu 'USUŃ z nazwy tabeli, gdzie id <254 and id> 3;' lub cokolwiek by działało. –

+0

ohh każda odpowiedź działa .... –

Odpowiedz

98

Najlepszym sposobem jest użycie IN oświadczenie:

DELETE from tablename WHERE id IN (1,2,3,...,254); 

Można również użyć BETWEEN jeśli masz kolejne identyfikatory:

DELETE from tablename WHERE id BETWEEN 1 AND 254; 

Można limitu kursu dla niektórych identyfikatorów używając inna klauzula WHERE:

DELETE from tablename WHERE id BETWEEN 1 AND 254 AND id<>10; 
+0

Zasięg ('>' i '<') jest lepszy niż "IN" pod względem wydajności, jak odkryliśmy dzisiaj w naszej aplikacji. Użyj instrukcji wyjaśniającej i zobacz, jak 'IN' nie używa indeksów. – kouton

+0

Nie martw się o to, w jaki sposób Twoje DBMS używają INDEX, czy nie ... zobacz http://stackoverflow.com/questions/586381/mysql-not-using-indexes-with-where-in-clause, aby zrozumieć, dlaczego czasami używasz INDEX będzie dłuższy niż pełne skanowanie tabeli! – JoDev

+0

to pomogło mi .. dzięki ~ up –

6

jak o użyciu IN

DELETE FROM tableName 
WHERE ID IN (1,2) -- add as many ID as you want. 
5

coś takiego może zrobić to nieco łatwiej, można oczywiście użyć skryptu do generowania tego, lub nawet przewyższać

DELETE FROM tablename WHERE id IN (
1, 
2, 
3, 
4, 
5, 
6 
); 
2

Zastosowanie IN Klauzula

DELETE from tablename where id IN (1,2); 

LUB możesz połączyć korzystanie z BETWEEN i NOT IN, aby zmniejszyć liczby, o których musisz wspomnieć.

DELETE from tablename 
where (id BETWEEN 1 AND 255) 
AND (id NOT IN (254)); 
3

jeśli trzeba zachować tylko kilka wierszy, należy rozważyć

DELETE FROM tablename WHERE id NOT IN (5,124,221); 

to zachowa tylko niektóre rekordy i wyrzucić innych.

2

Inni sugerowali IN, to jest w porządku. Można również użyć zakresu:

DELETE from tablename where id<254 and id>3; 

Jeśli identyfikatory do usunięcia sąsiadują.

1

Jeśli masz jakieś „warunek” w swoich danych, aby dowiedzieć się 254 identyfikatorów, można użyć:

delete from tablename 
where id in 
(select id from tablename where <your-condition>) 

lub po prostu:

delete from tablename where <your-condition> 

prostu ciężko kodowania wartości 254 id kolumna byłaby bardzo trudna w każdym przypadku.

1
DELETE FROM table_name WHERE id BETWEEN 1 AND 256; 

Spróbuj tego.

Powiązane problemy