CodeGym /Kursy /SQL SELF /Zmiana struktury tabel za pomocą ALTER TABLE

Zmiana struktury tabel za pomocą ALTER TABLE

SQL SELF
Poziom 17, Lekcja 4
Dostępny

No to czas pogadać o tym, jak zmieniać już istniejące tabele. W życiu projektu rzadko coś zostaje niezmienne — wymagania mogą spaść nagle, jak bombardilokrokodyl. Na przykład product manager nagle stwierdza, że każdy użytkownik potrzebuje unikalnego identyfikatora ulubionego koloru tła profilu. Albo dochodzisz do wniosku, że VARCHAR(50) dla imienia to żart, bo w bazie już siedzi użytkownik o imieniu "Bombardilokrokodyl-Junior-Trzeci".

No i właśnie, w PostgreSQL do takich akcji masz narzędzie — komendę ALTER TABLE.

ALTER TABLE — to komenda, która pozwala zmieniać strukturę istniejących tabel. Dzięki niej możesz:

  • Dodać nowe kolumny;
  • Usunąć niepotrzebne kolumny;
  • Zmienić typ danych kolumny;
  • Zmienić nazwę tabeli lub jej kolumn;
  • Dodać albo usunąć constrainty, takie jak NOT NULL, UNIQUE i wiele innych.

Można powiedzieć, że to jakbyś już zbudował dom (tabelę), ale teraz chcesz dobudować nowy pokój (kolumnę) albo wywalić niepotrzebną komórkę (usunąć kolumnę).

Składnia ALTER TABLE

Ogólna struktura komendy jest całkiem intuicyjna:

ALTER TABLE tabela
    akcja_zmiany;

Gdzie:

  • tabela — nazwa tabeli, którą chcesz zmienić;
  • akcja_zmiany — konkretna akcja, którą chcesz wykonać (np. dodać kolumnę, usunąć ją albo zmienić typ danych).

Przykłady użycia ALTER TABLE

Dodawanie nowej kolumny

Jeśli chcesz dodać do tabeli nową kolumnę, użyj komendy ADD COLUMN. Oto przykład:

ALTER TABLE students
ADD COLUMN email VARCHAR(100);

Ta komenda doda nową kolumnę email do tabeli students, gdzie będzie przechowywany adres e-mail studenta. Typ danych kolumny — string do 100 znaków.

Załóżmy, że stworzyłeś tabelę studentów, ale zapomniałeś dodać info o dacie ich przyjęcia. Tak to naprawisz:

ALTER TABLE students
ADD COLUMN enrollment_date DATE;

Teraz masz kolumnę enrollment_date i możesz zapisać datę przyjęcia.

Usuwanie kolumny

Jeśli uznasz, że jakaś kolumna już nie jest potrzebna, użyj komendy DROP COLUMN. Na przykład:

ALTER TABLE students
DROP COLUMN email;

Ta komenda usuwa kolumnę email z tabeli students. Pamiętaj, że dane z tej kolumny też zostaną usunięte bez możliwości odzyskania.

Ważna sprawa:

Jeśli spróbujesz usunąć kolumnę, która jest używana w innych tabelach (np. jako klucz obcy), PostgreSQL może rzucić błąd. W takich przypadkach najpierw trzeba usunąć zależności.

Zmiana typu danych kolumny

Czasem się zdarza, że wybrany na początku typ danych kolumny nie pasuje. Na przykład chciałeś trzymać wiek studentów jako SMALLINT, a potem ogarnąłeś, że to za mało i chcesz użyć BIGINT. Tak to zrobisz:

ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;

Ważna sprawa: jeśli w kolumnie już są dane, PostgreSQL sprawdzi, czy da się je przekonwertować do nowego typu. Jeśli nie, dostaniesz błąd.

Załóżmy, że stworzyłeś kolumnę description jako VARCHAR(100), ale potem ogarnąłeś, że opis kursów może być dużo dłuższy. Zmień typ danych na TEXT:

ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;

Teraz możesz trzymać pełne opisy kursów bez limitu długości.

Zmiana nazwy kolumny

Jeśli musisz zmienić nazwę kolumny, użyj komendy RENAME COLUMN:

ALTER TABLE students
RENAME COLUMN name TO full_name;

Teraz kolumna name będzie się nazywać full_name.

Zmiana nazwy tabeli

Możesz też zmienić nazwę samej tabeli. Do tego służy komenda RENAME TO:

ALTER TABLE students
RENAME TO university_students;

Teraz tabela students będzie się nazywać university_students.

Ustawianie/usuwanie constraintu NOT NULL

Załóżmy, że stworzyłeś kolumnę, ale zapomniałeś zrobić ją obowiązkową (NOT NULL). Spoko! Możesz dodać ten constraint później:

ALTER TABLE students
ALTER COLUMN name SET NOT NULL;

Jeśli chcesz zdjąć constraint NOT NULL, użyj komendy DROP NOT NULL:

ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;

Ustawianie wartości domyślnej

Jeśli kolumna już istnieje, ale chcesz ustawić dla niej wartość domyślną, użyj SET DEFAULT:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;

Żeby usunąć wartość domyślną, wykonaj:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;

Każdą z tych komend omówimy dokładniej w trzech kolejnych wykładach. Szykuj się :)

Typowe błędy przy użyciu ALTER TABLE

Przy pracy z ALTER TABLE mogą pojawić się błędy. Oto te najczęstsze:

Próba zmiany typu danych, który nie jest zgodny z obecnymi danymi. Na przykład, jeśli w kolumnie age już są dane, a próbujesz ją zmienić na string VARCHAR, to wywali błąd. Rozwiązanie: najpierw usuń albo przekonwertuj dane.

Próba usunięcia kolumny, która jest używana jako klucz obcy lub indeks. PostgreSQL nie pozwoli ci tego zrobić, żeby zachować spójność danych. Przed usunięciem zależnych kolumn trzeba usunąć powiązania.

Błędy składni. Komenda ALTER TABLE jest dość elastyczna, ale wymaga dokładnego trzymania się składni. Na przykład komenda ADD COLUMN musi zawierać typ danych.

Prawdziwe scenariusze użycia

W prawdziwym życiu komenda ALTER TABLE jest używana cały czas. Możesz ją spotkać przy:

  • Dodawaniu nowych danych do istniejącej tabeli (np. nowych kolumn);
  • Optymalizacji bazy danych (np. zmianie typów danych, żeby zmniejszyć zużycie pamięci);
  • Korygowaniu błędów projektowych (np. jeśli na początku zapomniałeś o constraintach albo źle dobrałeś typ danych).

Teraz już wiesz, jak potężna jest komenda ALTER TABLE. To mocne narzędzie, które pomaga ogarniać zmiany w projekcie. Najważniejsze — bądź uważny i nie spiesz się, żeby przypadkiem nie "rozwalić domu" (czyli twojej tabeli), próbując dobudować nowy pokój.

2
Zadanie
SQL SELF, poziom 17, lekcja 4
Niedostępne
Dodanie nowej kolumny do tabeli
Dodanie nowej kolumny do tabeli
2
Zadanie
SQL SELF, poziom 17, lekcja 4
Niedostępne
Zmiana typu danych kolumny
Zmiana typu danych kolumny
1
Ankieta/quiz
Podstawy tworzenia tabel, poziom 17, lekcja 4
Niedostępny
Podstawy tworzenia tabel
Podstawy tworzenia tabel
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION