CodeGym /Kursy /SQL SELF /Usuwanie tabeli za pomocą DROP TABLE

Usuwanie tabeli za pomocą DROP TABLE

SQL SELF
Poziom 18 , Lekcja 2
Dostępny

No to pogadajmy, jak poprawnie usuwać tabele z bazy danych przy pomocy komendy DROP TABLE.

DROP TABLE — to komenda, która pozwala wywalić tabelę z bazy razem z całą jej zawartością i strukturą. Wyobraź sobie, że napisałeś pracę dyplomową, a potem przypadkiem spaliłeś ją razem z laptopem. To mniej więcej jak użycie DROP TABLE. Brzmi strasznie? Spokojnie, najważniejsze to wiedzieć, jak to działa i być ostrożnym!

Charakterystyka DROP TABLE:

  • Usuwa całą tabelę (i jej dane) bez możliwości przywrócenia (jeśli nie zrobiłeś backupu).
  • Całkowicie zwalnia miejsce zajmowane przez tabelę na dysku.
  • Usuwa też wszystkie powiązane indeksy, ograniczenia i triggery.

Składnia komendy DROP TABLE

Komenda DROP TABLE ma prostą i czytelną składnię:

DROP TABLE tabela;

Gdzie:

  • tabela — nazwa tabeli, którą chcesz usunąć.

Prosty przykład usunięcia tabeli

Zobaczmy przykład. Załóżmy, że mamy tabelę students:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INTEGER CHECK (age > 0)
);

Jeśli ta tabela nie jest już potrzebna, możesz ją usunąć komendą:

DROP TABLE students;

Po wykonaniu tej komendy tabela students całkowicie zniknie z bazy, razem ze wszystkimi danymi o studentach (które mogły się tam znajdować).

Usuwanie kilku tabel naraz

Możesz też usunąć kilka tabel jednym zapytaniem. Wystarczy wypisać je po przecinku:

DROP TABLE table1, table2, table3;

Przykład:

DROP TABLE students, teachers, courses;

Ta komenda usunie od razu trzy tabele: students, teachers i courses.

Użycie IF EXISTS

Komenda DROP TABLE rzuci błąd, jeśli spróbujesz usunąć nieistniejącą tabelę. Żeby tego uniknąć, użyj opcji IF EXISTS:

DROP TABLE IF EXISTS table_name;

Przykład:

DROP TABLE IF EXISTS students;

Jeśli tabela students istnieje, zostanie usunięta. Jeśli nie, komenda wykona się bez błędu, wyświetlając tylko ostrzeżenie.

Usuwanie tabel z zależnościami

Czasem usunięcie tabeli może być utrudnione, jeśli inne tabele lub obiekty od niej zależą. Na przykład, jeśli tabela ma klucze obce powiązane z innymi tabelami. O kluczach obcych opowiem więcej na kolejnym poziomie :P

Załóżmy, że masz dwie tabele: students i enrollments. Tabela enrollments zależy od students, bo odwołuje się do niej przez klucz obcy.

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE enrollments (
    id SERIAL PRIMARY KEY,
    student_id INTEGER REFERENCES students(id), -- kolumna student_id odnosi się do students.id
    course_name VARCHAR(100)
);

Jeśli spróbujesz usunąć tabelę students bez wcześniejszego usunięcia enrollments, dostaniesz błąd:

DROP TABLE students;
-- ERROR:  nie można usunąć tabeli "students", bo inne obiekty od niej zależą
-- DETAIL:  constraint enrollments_student_id_fkey w tabeli enrollments zależy od tabeli students

Żeby usunąć tabelę i wszystkie zależne obiekty, użyj opcji CASCADE:

DROP TABLE students CASCADE;

Ta komenda usunie tabelę students i automatycznie wywali wszystkie obiekty, które od niej zależą (w tym przypadku tabelę enrollments).

Ale uważaj z CASCADE, bo może usunąć więcej, niż się spodziewasz. Żeby sprawdzić, co zostanie usunięte, użyj CASCADE i potem przejrzyj logi :)

Usuwanie tabel bez usuwania zależnych obiektów

Jeśli chcesz zapobiec przypadkowemu usunięciu powiązanych obiektów, użyj opcji RESTRICT. Ta opcja blokuje usunięcie tabeli, jeśli są od niej zależne inne obiekty:

DROP TABLE students RESTRICT;

Jeśli tabela ma zależne obiekty, komenda rzuci błąd i nie wykona usuwania.

Tabele tymczasowe i ich usuwanie

Tabele tymczasowe (tworzone przez CREATE TEMP TABLE) są automatycznie usuwane, gdy sesja bazy się kończy. Ale możesz też usunąć tymczasową tabelę ręcznie w trakcie sesji za pomocą DROP TABLE.

Przykład:

CREATE TEMP TABLE temp_data (
    id SERIAL PRIMARY KEY,
    value TEXT
);

DROP TABLE temp_data;

Typowe błędy przy użyciu DROP TABLE

Próba usunięcia nieistniejącej tabeli. Żeby uniknąć błędu, użyj IF EXISTS.

DROP TABLE IF EXISTS non_existing_table;

Usuwanie tabeli z zależnościami bez CASCADE. Jeśli inne tabele są powiązane z tą, którą próbujesz usunąć, komenda zakończy się błędem. Użyj CASCADE, jeśli jesteś pewien, że chcesz wywalić wszystkie zależności.

DROP TABLE students CASCADE;

Nadmierne używanie CASCADE. To może prowadzić do usunięcia krytycznych obiektów. Zanim użyjesz CASCADE, upewnij się, że wiesz, co zostanie usunięte.

Przypadkowe usunięcie tabeli. Zawsze dwa razy sprawdź, co usuwasz, szczególnie na produkcyjnych bazach danych.

Przydatne tipy, czasem na serio

Tip 1: wszystkiego się wyprzyj

Usuwaj ślady szybciej niż dane.
A potem z pełnym przekonaniem powiedz: „To była anomalia w logach. Już to naprawiłem”.

Udawaj, że to feature.
„Postanowiliśmy zrobić stress-test odporności… No i system nie wytrzymał. Ale przynajmniej wiemy, co poprawić!”

Ogłoś ewakuację: „Mamy incydent na poziomie produkcji”.
Jak wszyscy biegają i panikują — nikt nie zdąży zapytać, kto kliknął DELETE FROM bez WHERE.

Zaktualizuj CV na pracuj.pl jako DBA.
Teraz naprawdę jesteś bliżej baz danych. Zwłaszcza tych, których już nie ma.

Zaplanuj sobie wcześniej coffee break.
Bo za chwilę mogą ci zaproponować „odpoczynek od projektu… na zawsze”.

Udawaj, że to był staging.
„A jesteście pewni, że to nie był testowy środowisko? Coś tam testowaliśmy… chyba…”

Usiądź w samym środku open space.
Nikt nie uwierzy, że winny miałby odwagę siedzieć tak na widoku.

Obwiniaj ChatGPT.
To wszystko sztuczna inteligencja. Jak widać, jeszcze nie jest gotowa cię zastąpić. Nie zwalniajcie mnie, proszę.

Tip 2: jak szukać pracy z podszarganą reputacją

  • Usuń wszystkie tabele naraz. Wtedy szefostwo będzie zbyt zajęte, żeby kogoś zwolnić osobiście.

  • Nikt nie odpowiada sam. Jeśli pociągniesz za sobą szefa — złych referencji już nie będzie.

  • Usunąłeś dane klientów? Gratulacje, firma ma teraz większe problemy niż twoje zwolnienie.

Tip 3: backup przed usuwaniem

A teraz — na poważnie.

Zanim usuniesz tabelę (szczególnie jeśli ma ważne dane), zrób backup za pomocą komendy pg_dump. Dzięki temu odzyskasz dane, jeśli przypadkiem coś usuniesz.

Przykład komendy do backupu:

pg_dump -U username -d database_name -t table_name > table_backup.sql

Na tym etapie ogarniasz już wszystkie podstawy pracy z komendą DROP TABLE. Trzymaj tę "atomową bombę" przy sobie i używaj jej tylko wtedy, gdy jesteś pewien, co robisz. W kolejnej lekcji będziemy dalej ogarniać zmiany struktury tabel i innych obiektów bazy danych.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION