Zapytanie TRUNCATE: Opróżnianie tabeli

Zapytanie TRUNCATE w MySQL służy do opróżniania tabeli, czyli usuwania wszystkich rekordów z tabeli, ale bez usuwania jej struktury. W przeciwieństwie do zapytania DELETE, operacja TRUNCATE działa szybciej i nie generuje pojedynczych usunięć rekordów – zamiast tego resetuje całą tabelę.

Najważniejsza różnica pomiędzy DELETE a TRUNCATE polega na tym, że TRUNCATE usuwa wszystkie rekordy w sposób natychmiastowy i często resetuje licznik AUTO_INCREMENT.

📌 Podstawowa składnia zapytania TRUNCATE

✅ Podstawowa składnia:

  • TRUNCATE TABLE – polecenie do opróżnienia tabeli.
  • nazwa_tabeli – wskazuje tabelę, którą chcemy opróżnić.

📌 Opis:

  • Wszystkie rekordy zostaną usunięte, ale struktura tabeli pozostanie.
  • Zostanie również zresetowany licznik AUTO_INCREMENT.
Przykład
-- Podstawowa składnia TRUNCATE TABLE nazwa_tabeli;

📌 Różnice między TRUNCATE a DELETE

✅ Przykład: Porównanie DELETE i TRUNCATE

Kluczowe różnice

  • TRUNCATE działa szybciej, ponieważ nie usuwa rekordów pojedynczo, tylko resetuje tabelę.
  • DELETE pozwala na usunięcie tylko wybranych rekordów (np. tych spełniających warunek `WHERE`).
  • TRUNCATE resetuje licznik `AUTO_INCREMENT`, podczas gdy `DELETE` tego nie robi.
  • Zapytanie TRUNCATE nie może być cofnięte, jeśli nie używamy transakcji.
Przykład
DELETE FROM uzytkownicy; -- Usuwa wszystkie rekordy, ale nie resetuje AUTO_INCREMENT
TRUNCATE TABLE uzytkownicy; -- Usuwa wszystkie rekordy i resetuje AUTO_INCREMENT

📌 Kiedy używać TRUNCATE zamiast DELETE?

✅ Zalecenia dotyczące stosowania TRUNCATE

  • Jeśli chcesz usunąć wszystkie rekordy z tabeli i nie potrzebujesz zachować ich historii.
  • Jeśli zależy Ci na szybkim opróżnieniu tabeli w celu ponownego załadowania danych.
  • Jeśli chcesz zresetować licznik AUTO_INCREMENT.

📌 Ciekawostka

  • Jeśli przechowujemy dane tymczasowe, możemy okresowo opróżniać tabelę, aby usunąć niepotrzebne wpisy i rozpocząć od nowa.
Przykład
TRUNCATE TABLE zamowienia;

Podsumowanie

  • Zapytanie TRUNCATE usuwa wszystkie rekordy z tabeli i resetuje licznik `AUTO_INCREMENT`.
  • Jest szybsze niż DELETE, ponieważ działa bez usuwania pojedynczych wierszy.
  • Nie można używać `WHERE` w zapytaniu `TRUNCATE` – usuwa ono całą zawartość tabeli.
  • Jeśli potrzebujesz usunąć wybrane rekordy, użyj zapytania DELETE zamiast `TRUNCATE`.
  • Przed użyciem `TRUNCATE` warto sprawdzić, czy nie są potrzebne kopie zapasowe danych.