MYSQL – ZMIEŃ, USUŃ, ZMIEŃ NAZWĘ, MODYFIKUJ
⚡ Inteligentne podsumowanie
ALTER, DROP, RENAME i MODIFY to MySQL Polecenia, które zmieniają strukturę bazy danych po jej użyciu. Dodają, usuwają, zmieniają nazwy i redefiniują obiekty, takie jak tabele i kolumny, bez usuwania wierszy, które zostały już zapisane.

Czym jest polecenie ALTER w MySQL?
ZMIANA Polecenie modyfikuje istniejącą bazę danych, tabelę, widok lub inny obiekt bazy danych, który wymaga zmiany w trakcie cyklu życia bazy danych. To polecenie pozwala na ewolucję schematu po jego utworzeniu i wypełnieniu danymi.
Wymagania biznesowe rzadko stoją w miejscu, a projekt bazy danych musi się wraz z nimi zmieniać. Załóżmy, że projekt bazy danych Myflix został wdrożony i użytkownicy z niego korzystają, a dopiero wtedy zespół zdaje sobie sprawę, że istotne informacje zostały pominięte. Nikt nie chce stracić istniejących wierszy; po prostu chce rejestrować nowe informacje obok nich.
ALTER rozwiązuje dokładnie taki problem. Może zmienić typ danych pola z ciągu na liczbę, zmienić nazwę pola lub dodać zupełnie nową kolumnę do tabeli, a dane już zapisane w tabeli pozostają nienaruszone.
Mając już ustalony cel polecenia, następnym krokiem jest składnia, która je wykonuje.
MySQL Składnia ALTER
Poniżej przedstawiono podstawową składnię służącą do dodawania kolumny do już istniejącej tabeli.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
TUTAJ
- „ZMIEŃ TABELĘ „nazwa_tabeli”” to polecenie, które mówi MySQL serwer, aby zmodyfikował tabelę o nazwie `nazwa_tabeli`.
- „DODAJ KOLUMNĘ `nazwa_kolumny` `typ_danych`” to polecenie, które mówi MySQL serwer, aby dodać nową kolumnę o nazwie `column_name` z typem danych `data_type`.
Załóżmy, że Myflix wprowadził rozliczenia i płatności online. Aby to umożliwić, należy dodać pole na numer karty kredytowej do tabeli „członkowie”. Przed wprowadzeniem jakichkolwiek zmian warto przyjrzeć się strukturze tabeli w jej obecnym stanie. Skrypt pokazany poniżej to umożliwia.
SHOW COLUMNS FROM `members`;
| Pole | Typ | Null | Klawisz | Domyślnie | Extra |
|---|---|---|---|---|---|
| numer_członkostwa | int (11) | NIE | PRI | NULL | auto_inkrementacja |
| pełne nazwy | varchar(350) | NIE | NULL | ||
| płeć | varchar(6) | TAK | NULL | ||
| data_urodzenia | dane | TAK | NULL | ||
| adres fizyczny | varchar(255) | TAK | NULL | ||
| adres_pocztowy | varchar(255) | TAK | NULL | ||
| numer kontaktowy | varchar(75) | TAK | NULL | ||
| varchar(255) | TAK | NULL |
💡 Uwaga na temat int(11): Liczba w nawiasach to tylko szerokość wyświetlacza. MySQL Wersja 8.0.17 wycofała tę funkcję dla typów całkowitych, więc nowoczesny serwer raportuje tę kolumnę po prostu jako intRozmiar pamięci masowej pozostaje niezmieniony.
Poniższy skrypt dodaje nowe pole do tabeli members.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Uruchomienie tego skryptu w bazie danych myflixdb dodaje kolumnę o nazwie credit_card_number do tabeli members z typem danych VARCHAR. Ponowne uruchomienie skryptu SHOW COLUMNS daje następujący wynik.
| Pole | Typ | Null | Klawisz | Domyślnie | Extra |
|---|---|---|---|---|---|
| numer_członkostwa | int (11) | NIE | PRI | NULL | auto_inkrementacja |
| pełne nazwy | varchar(350) | NIE | NULL | ||
| płeć | varchar(6) | TAK | NULL | ||
| data_urodzenia | dane | TAK | NULL | ||
| adres fizyczny | varchar(255) | TAK | NULL | ||
| adres_pocztowy | varchar(255) | TAK | NULL | ||
| numer kontaktowy | varchar(75) | TAK | NULL | ||
| varchar(255) | TAK | NULL | |||
| numer karty kredytowej | varchar(25) | TAK | NULL |
Podświetlony wiersz potwierdza, że credit_card_number został dodany do tabeli members, a dane już znajdujące się w innych kolumnach nie zostały przez to dodanie zmienione.
Dodanie kolumny to dopiero połowa sukcesu. Schemat musi również usunąć obiekty, których już nie potrzebuje, co jest zadaniem polecenia DROP.
Czym jest polecenie DROP w MySQL?
Polecenie DROP usuwa obiekt na stałe. Służy do:
- Usuń bazę danych z MySQL serwer.
- Usuń obiekt, taki jak tabela lub kolumna, z bazy danych.
⚠️ Ostrzeżenie: Polecenie DROP nie jest odwracalne. Ani obiektu, ani wierszy w nim zawartych nie da się odzyskać bez kopii zapasowej, dlatego należy uruchomić polecenie SELECT dla obiektu docelowego i najpierw potwierdzić kopię zapasową.
Spadekping kolumna
W powyższym przykładzie ALTER kolumna o nazwie credit_card_number została dodana do tabeli members. Załóżmy, że funkcja rozliczeń online została odroczona i ta kolumna powinna zostać ponownie usunięta. Poniższy skrypt to robi.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Wykonanie skryptu usuwa kolumnę credit_card_number z tabeli members. Ponowne wylistowanie kolumn potwierdza wynik.
SHOW COLUMNS FROM `members`;
| Pole | Typ | Null | Klawisz | Domyślnie | Extra |
|---|---|---|---|---|---|
| numer_członkostwa | int (11) | NIE | PRI | NULL | auto_inkrementacja |
| pełne nazwy | varchar(350) | NIE | NULL | ||
| płeć | varchar(6) | TAK | NULL | ||
| data_urodzenia | dane | TAK | NULL | ||
| adres fizyczny | varchar(255) | TAK | NULL | ||
| adres_pocztowy | varchar(255) | TAK | NULL | ||
| numer kontaktowy | varchar(75) | TAK | NULL | ||
| varchar(255) | TAK | NULL |
Numer karty kredytowej zniknął z listy pól.
UPUŚĆ TABELĘ
Składnia usuwania całej tabeli z bazy danych jest następująca.
DROP TABLE `sample_table`;
Zastosowane do rzeczywistego obiektu, oświadczenie wygląda następująco.
DROP TABLE `categories_archive`;
Jego wykonanie powoduje usunięcie z bazy danych tabeli o nazwie `categories_archive` i wszystkich wierszy w niej zawartych.
UPUŚĆ BAZY DANYCH
To samo słowo kluczowe usuwa cały schemat. Dodanie IF EXISTS pomija błąd, który MySQL pojawia się, gdy cel już nie istnieje, co jest przydatne w skryptach uruchamianych więcej niż jeden raz.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Usunięcie obiektu jest ostateczne. Jeśli obiekt powinien przetrwać, a tylko jego nazwa jest błędna, właściwym narzędziem jest polecenie RENAME.
Czym jest polecenie RENAME w MySQL?
Polecenie RENAME zmienia nazwę istniejącego obiektu bazy danych, takiego jak tabela lub kolumna, na nową nazwę. Zmiana nazwy tabeli nie powoduje utraty danych w niej zawartych.
Polecenie ma następującą podstawową składnię.
RENAME TABLE `current_table_name` TO `new_table_name`;
Aby zmienić nazwę tabeli movierentals na movie_rentals, należy użyć poniższego skryptu.
RENAME TABLE `movierentals` TO `movie_rentals`;
Jego wykonanie zmienia nazwę tabeli `movierentals` na `movie_rentals`. Ponieważ zmiana nazwy dotyczy jedynie etykiety, to samo polecenie, odwrócone, przywraca oryginalną nazwę.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE obsługuje nazwę tabeli. Zmiana nazwy kolumna, a zmiana tego, co zawiera, jest działaniem słowa kluczowego CHANGE.
Słowo kluczowe ZMIANA
Słowo kluczowe CHANGE pozwala na:
- Zmień nazwę kolumny
- Zmień typ danych kolumny
- Zmień ograniczenia kolumn
Rozważmy przykład. Pole full_names w tabeli members ma typ danych varchar i szerokość 350, co potwierdza poniższy skrypt.
SHOW COLUMNS FROM `members`;
| Pole | Typ | Null | Klawisz | Domyślnie | Extra |
|---|---|---|---|---|---|
| numer_członkostwa | int (11) | NIE | PRI | NULL | auto_inkrementacja |
| pełne nazwy | varchar(350) | NIE | NULL | ||
| płeć | varchar(6) | TAK | NULL | ||
| data_urodzenia | dane | TAK | NULL | ||
| adres fizyczny | varchar(255) | TAK | NULL | ||
| adres_pocztowy | varchar(255) | TAK | NULL | ||
| numer kontaktowy | varchar(75) | TAK | NULL | ||
| varchar(255) | TAK | NULL |
Załóżmy, że wymaganie jest takie,
- Zmień nazwę pola z „full_names” na „fullname”
- Zmień go na typ danych char o szerokości 250
- Dodaj ograniczenie NOT NULL
Wszystkie trzy edycje wykonuje się za pomocą jednego polecenia CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Uruchomienie go w bazie danych myflixdb i następnie skryptu SHOW COLUMNS daje następujący wynik.
| Pole | Typ | Null | Klawisz | Domyślnie | Extra |
|---|---|---|---|---|---|
| numer_członkostwa | int (11) | NIE | PRI | NULL | auto_inkrementacja |
| pełne imię i nazwisko | zwęglać (250) | NIE | NULL | ||
| płeć | varchar(6) | TAK | NULL | ||
| data_urodzenia | dane | TAK | NULL | ||
| adres fizyczny | varchar(255) | TAK | NULL | ||
| adres_pocztowy | varchar(255) | TAK | NULL | ||
| numer kontaktowy | varchar(75) | TAK | NULL | ||
| varchar(255) | TAK | NULL |
Kolumna nazywa się teraz fullname, przechowuje wartości char(250) i odrzuca wartości NULL.
MODYFIKUJ słowo kluczowe
Słowo kluczowe MODIFY pozwala na:
- Modyfikuj typ danych kolumny
- Modyfikuj ograniczenia kolumn
W powyższym przykładzie CHANGE nazwa pola musiała zostać podana dwukrotnie, chociaż zmiana nazwy stanowiła tylko część celu. Pominięcie nazwy pola w poleceniu CHANGE powoduje błąd. Gdy trzeba dostosować tylko typ danych i ograniczenia, a nazwa powinna pozostać taka sama, polecenie MODIFY wykonuje zadanie po jednym wspomnieniu o kolumnie.
Poniższy skrypt zmienia szerokość pola „pełna nazwa” z 250 na 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Uruchomienie go w bazie danych myflixdb i następnie skryptu SHOW COLUMNS daje wynik pokazany poniżej.
| Pole | Typ | Null | Klawisz | Domyślnie | Extra |
|---|---|---|---|---|---|
| numer_członkostwa | int (11) | NIE | PRI | NULL | auto_inkrementacja |
| pełne imię i nazwisko | zwęglać (50) | NIE | NULL | ||
| płeć | varchar(6) | TAK | NULL | ||
| data_urodzenia | dane | TAK | NULL | ||
| adres fizyczny | varchar(255) | TAK | NULL | ||
| adres_pocztowy | varchar(255) | TAK | NULL | ||
| numer kontaktowy | varchar(75) | TAK | NULL | ||
| varchar(255) | TAK | NULL |
⚠️ Ostrzeżenie: Zwężenie kolumny powoduje obcięcie danych, które już się nie mieszczą. Każda nazwa dłuższa niż 50 znaków jest skracana przez to polecenie, więc sprawdź najdłuższą istniejącą wartość za pomocą SELECT zapytanie przed zmniejszeniem pola.
ZMIEŃ vs MODYFIKUJ vs ZMIEŃ NAZWĘ KOLUMNY
Te trzy słowa kluczowe nakładają się na siebie, a wybór niewłaściwego jest najczęstszym źródłem błędów w tym obszarze. Poniższa tabela zestawia je ze sobą.
| słowo kluczowe | Zmienia nazwę kolumny | Zmienia typ i ograniczenia | Wymagana stara nazwa | Typowe zastosowanie |
|---|---|---|---|---|
| ŚWIAT | Tak | Tak | Tak, plus nowa nazwa | Zmień nazwę i zdefiniuj ponownie w jednym poleceniu |
| MODYFIKOWAĆ | Nie | Tak | Imię nadane raz | Poszerz, zwęź lub wpisz ponownie kolumnę |
| ZMIEŃ NAZWĘ KOLUMNY | Tak | Nie | Tak, plus nowa nazwa | Tylko zmień nazwę z MySQL 8.0 i nowsze |
MySQL Wersja 8.0 dodała czwartą opcję dla najprostszego przypadku: zmianę nazwy bez żadnej redefinicji.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Typ i nazwa są już ustalone. Pozostaje pytanie, gdzie umieścić nową kolumnę w tabeli, co kontroluje słowo kluczowe AFTER.
Słowo kluczowe AFTER
Domyślnie kolumna dodana poleceniem ALTER TABLE trafia na koniec tabeli. Aby umieścić ją w określonym miejscu, należy połączyć polecenie ALTER ze słowem kluczowym AFTER.
Poniższy skrypt dodaje „date_of_registration” bezpośrednio po dacie „date_of_birth” w tabeli members.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Uruchomienie go w bazie danych myflixdb i następnie skryptu SHOW COLUMNS daje wynik pokazany poniżej.
| Pole | Typ | Null | Klawisz | Domyślnie | Extra |
|---|---|---|---|---|---|
| numer_członkostwa | int (11) | NIE | PRI | NULL | auto_inkrementacja |
| pełne imię i nazwisko | zwęglać (50) | NIE | NULL | ||
| płeć | varchar(6) | TAK | NULL | ||
| data_urodzenia | dane | TAK | NULL | ||
| data_rejestracji | dane | TAK | NULL | ||
| adres fizyczny | varchar(255) | TAK | NULL | ||
| adres_pocztowy | varchar(255) | TAK | NULL | ||
| numer kontaktowy | varchar(75) | TAK | NULL | ||
| varchar(255) | TAK | NULL |
Podświetlony wiersz to kolumna dodana po dacie urodzenia. Słowo kluczowe FIRST działa w ten sam sposób i przenosi nową kolumnę na sam początek tabeli.
