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.

  • 🛠️. Polecenie ALTER: Polecenie ALTER TABLE umożliwia ponowne zdefiniowanie obiektu, który już istnieje, dzięki czemu schemat na żywo uwzględnia nowe wymagania bez konieczności przebudowy.
  • DODAJ KOLUMNĘ: Polecenie ALTER TABLE ADD COLUMN dodaje pole, a istniejące wiersze zachowują wszystkie wartości, które już zawierały.
  • 🗑️ Polecenie DROP: DROP usuwa trwale: bazę danych, tabelę lub pojedynczą kolumnę za pomocą polecenia ALTER TABLE DROP COLUMN.
  • 🔁 Polecenie RENAME: Polecenie RENAME TABLE zmienia wyłącznie nazwę tabeli, a zawarte w niej dane nie zostają utracone.
  • ✏️ ZMIANA Słowo kluczowe: CHANGE zmienia nazwę kolumny i definiuje jej typ oraz ograniczenia w jednym poleceniu, więc wymagane są obie nazwy kolumn.
  • 🧩 MODYFIKUJ Słowo kluczowe: MODIFY zmienia typ i ograniczenia, podczas gdy keeping nazwa, bezpieczniejszy wybór w przypadku edycji zawierającej tylko tekst.
  • 📍 Słowo kluczowe AFTER: AFTER umieszcza nowo dodaną kolumnę w wybranej pozycji zamiast na końcu tabeli.

MySQL ZMIEŃ, USUŃ, ZMIEŃ NAZWĘ i MODYFIKUJ

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
E-mail 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
E-mail 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:

  1. Usuń bazę danych z MySQL serwer.
  2. 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
E-mail 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:

  1. Zmień nazwę kolumny
  2. Zmień typ danych kolumny
  3. 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
E-mail varchar(255) TAK NULL

Załóżmy, że wymaganie jest takie,

  1. Zmień nazwę pola z „full_names” na „fullname”
  2. Zmień go na typ danych char o szerokości 250
  3. 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
E-mail 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:

  1. Modyfikuj typ danych kolumny
  2. 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
E-mail 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
E-mail 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.

FAQ

Nie. Polecenia DDL, takie jak ALTER, DROP i RENAME, zatwierdzają niejawnie MySQL, więc otwarta transakcja nie może ich cofnąć. Przywrócenie z kopii zapasowej to jedyna droga powrotna.

Zależy to od zmiany. Wiele modyfikacji InnoDB działa online i umożliwia równoczesne odczyty i zapisy, podczas gdy inne kopiują całą tabelę i zapisy blokowe. Dodaj klauzule ALGORITHM i LOCK, aby określić, co akceptujesz.

DROP usuwa sam obiekt. TRUNCATE opróżnia tabelę, ale zachowuje jej strukturę. DELETE usuwa wybrane wiersze i można je filtrować przy użyciu klauzuli WHERE.

Zazwyczaj tak. Asystenci AI wbudowani w klientów, tacy jak MySQL Workbench zmień żądanie takie jak „dodaj kolumnę z datą dopuszczającą wartość null po date_of_birth” na prawidłową składnię. RevPrzed uruchomieniem należy porównać wygenerowane polecenie ze schematem na żywo.

Tylko częściowo. Narzędzia do analizy AI sygnalizują oczywiste zagrożenia, takie jak pominięta kolumna, która nadal jest nazwana w zapytaniu, lub zawężony typ, który obcina dane. Nie widzą wszystkich wywołujących, więc konieczne jest przeprowadzenie testu przejściowego.

Podsumuj ten post następująco: