MySQL jest najpopularniejszą na świecie bazą danych typu open source, znaną ze swojej szybkości i niezawodności. W tym artykule opisano, jak usunąć wszystkie dane z tabeli bazy danych MySQL i jak wpływa to na pola auto incremental.
Usuń i obcinaj
istnieją dwa sposoby usunięcia wszystkich danych w tabeli bazy danych MySQL.
TRUNCATE TABLE tablename;
spowoduje to bardzo szybkie usunięcie wszystkich danych w tabeli. W MySQL tabela jest faktycznie upuszczana i odtwarzana, stąd szybkość zapytania. Liczba usuniętych wierszy dla tabel MyISAM jest zwracana zerem; dla INNODB zwraca rzeczywistą liczbę usuniętych.
DELETE FROM tablename;
to również usuwa wszystkie dane w tabeli, ale nie jest tak szybkie, jak przy użyciu metody „TRUNCATE TABLE”. W MySQL > = 4.0 zwracana jest liczba usuniętych wierszy; w MySQL 3.23 zwracana jest zawsze liczba zero.
kolumny z automatycznym przyrostem dla tabel MyISAM
Jeśli w tabeli MyISAM znajduje się kolumna z automatycznym przyrostem klucza podstawowego, wynik będzie nieco inny w zależności od używanej metody usuwania. Przy użyciu metody „TRUNCATE TABLE” wartość początkową automatycznego przyrostu zostanie zresetowana z powrotem do 1. Przy użyciu metody „usuń z” automatycznie przyrost nasion zostanie pozostawiony tak, jak wcześniej (np. jeśli pole automatycznego przyrostu ostatniego włożonego rekordu wynosi 123, następny włożony rekord zostanie ustawiony na 124).
zauważ, że jest to prawdziwe dla MySQL>= 4.0; z mojego czytania strony podręcznika TRUNCATE w MySQL 3.23 TRUNCATE działa tak samo jak DELETE, co oznaczałoby, że automatycznie przyrost nie jest resetowany. Nie mam obecnie bazy danych 3.23 skonfigurowanej do testowania, więc nie mogę tego potwierdzić.
kolumny automatycznego przyrostu dla tabel INNODB
w przypadku tabel INNODB, niezależnie od tego, czy używasz metody „obcinaj tabelę”, czy „usuń z”, pole automatycznego przyrostu nie zostanie zresetowane. Jeśli wstawisz 5 rekordów do nowej tabeli, a następnie usuniesz wszystkie rekordy i wstawisz kolejny rekord, pole będzie miało wartość 6, niezależnie od zastosowanej metody.
aktualizacja 17 Lut 2009: pierwotnie napisałem ten post, gdy MySQL 4.0 był aktualną wersją. Właśnie przetestowałem powyższe teraz na tabeli INNODB przy użyciu MySQL 5.0 i za pomocą TRUNCATE resetuje pole Auto increment z powrotem do domyślnego. Albo więc zachowanie się zmieniło w pewnym momencie, albo byłem niepoprawny przy składaniu powyższego stwierdzenia.
czy na pewno chcesz usunąć wszystkie dane?
przed usunięciem wszystkich danych w bazie danych powinieneś upewnić się, że naprawdę zamierzasz usunąć wszystkie dane. Często opłaca się najpierw „SELECT * FROM tablename” lub „SELECT COUNT ( * ) FROM tablename” przed zrobieniem tego, aby sprawdzić, czy naprawdę można bezpiecznie usunąć wszystkie dane. Może naprawdę chcesz zrobić coś w rodzaju” usuń z tablename WHERE foo = 'bar’ ” zamiast tego.