Database
 sql >> Baza danych >  >> RDS >> Database

SQL ALTER TABLE dla początkujących

W SQL ALTER TABLE instrukcja modyfikuje definicję istniejącej tabeli.

Możesz użyć ALTER TABLE zmieniać, dodawać lub usuwać kolumny i ograniczenia.

W zależności od systemu DBMS, ALTER TABLE Instrukcja może być również używana do ponownego przypisywania i odbudowy partycji lub wyłączania i włączania ograniczeń i wyzwalaczy.

Składnia

ALTER TABLE oświadczenie ogólnie wygląda tak:

ALTER TABLE table_name
    [alter_option [, alter_option] ...]
    [partition_options]

Gdzie:

  • table_name to nazwa tabeli, którą chcesz zmienić.
  • [alter_option [, alter_option] …] to lista konkretnych zmian, które chcesz wprowadzić (na przykład ADD po której następuje nazwa i definicja kolumny lub DROP COLUMN po której następuje nazwa kolumny itp.
  • [partition_options] to opcjonalna lista opcji przeznaczona specjalnie dla tabel partycjonowanych. Nie wszystkie DBMS obsługują tabele partycjonowane. Jeśli tak, takie opcje mogą umożliwić dodawanie, upuszczanie, odrzucanie, importowanie, scalanie lub dzielenie partycji lub przeprowadzanie konserwacji partycjonowania.

Pełna składnia ALTER TABLE może być dość złożony i znacznie się różni w zależności od DBMS. W przypadku wszystkiego, co nie zostało omówione w tym artykule, zapoznaj się z dokumentacją DBMS.

Poniżej znajdują się przykłady najczęstszych ALTER TABLE operacje.

Dodaj nową kolumnę

Aby dodać nową kolumnę do tabeli, użyj ADD klauzula, po której następuje nazwa kolumny i typ danych.

ALTER TABLE Products 
ADD ProductDescription varchar(500);

Spowoduje to dodanie nowej kolumny o nazwie ProductDescription do Products tabela.

W tym przykładzie utworzyliśmy kolumnę jako varchar(500) ale użyjesz dowolnego typu danych, który jest odpowiedni dla Twojej nowej kolumny.

Możesz również uwzględnić ograniczenia w definicji kolumny, ale może to zależeć od Twojego DBMS i tego, czy tabela już zawiera dane (patrz omówienie tego poniżej).

Zmień nazwę kolumny

Większość głównych systemów zarządzania bazą danych (PostgreSQL, Oracle, SQLite, MySQL 8.0+, MariaDB 10.5.2+) umożliwia zmianę nazwy kolumny w następujący sposób:

ALTER TABLE table_name 
RENAME COLUMN column_name TO new_column_name;

Jeśli używasz MySQL w wersji starszej niż 8.0 lub MariaDB starszej niż 10.5.2, musisz użyć CHANGE COLUMN zamiast tego składnia, która wymaga również ponownego określenia typu danych. Tak:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name datatype;

W SQL Server będziesz musiał użyć sp_rename procedura składowana, aby zmienić nazwę kolumny. Tak:

EXEC sp_rename 'schema_name.table_name.column_name', 'new_column_name', 'COLUMN';

Upuść kolumnę

Aby upuścić kolumnę, użyj DROP COLUMN klauzula, po której następuje nazwa kolumny.

ALTER TABLE table_name 
DROP COLUMN column_name;

Zmień definicję kolumny

Składnia modyfikacji definicji istniejącej kolumny różni się znacznie w poszczególnych DBMS. Zależy to również od tego, jakie modyfikacje należy wprowadzić.

Aby wszystko było proste, zróbmy prostą modyfikację kolumny w SQL Server:

ALTER TABLE Products 
ALTER COLUMN ProductDescription varchar(1000);

W tym przykładzie zmieniliśmy ProductDescription kolumna z varchar(500) do varchar(1000) .

Poniżej przedstawiono podstawową składnię wymaganą przez każdy DBMS, aby dokonać takich samych lub podobnych zmian.

Serwer SQL:

ALTER TABLE table_name 
ALTER COLUMN column_name datatype;

PostgreSQL:

ALTER TABLE table_name 
ALTER COLUMN column_name TYPE datatype;

MySQL, MariaDB i Oracle przed 10g:

ALTER TABLE table_name 
MODIFY COLUMN column_name datatype;

W Oracle 10g i nowszych:

ALTER TABLE table_name 
MODIFY column_name datatype;

SQLite nie pozwoli ci zmienić kolumny poza zmianą jej nazwy.

Rzeczywista składnia każdego DBMS jest zwykle znacznie bardziej złożona i zależy dokładnie od tego, co próbujesz zrobić. Powinno to jednak rozpocząć od podstawowych modyfikacji kolumn.

Ograniczenia i uwagi

Generalnie należy unikać modyfikacji tabel, które zawierają dane. Wprowadzając zmiany, ryzykujesz utratę istniejących danych.

Powiedziawszy to, wiele DBMS faktycznie uniemożliwia wprowadzenie pewnych zmian, gdy tabela zawiera dane. Na przykład może się okazać, że nie możesz dodać NOT NULL ograniczenie do kolumny zawierającej dane.

Niektóre DBMS mogą na to pozwolić, o ile używasz DEFAULT ograniczenie (aby zapewnić wartość domyślną dla kolumn, do których nie wstawiono jawnie danych) lub kolumnę tożsamości/autoinkrementacji, kolumnę sygnatury czasowej itp.

Niektóre DBMS nie pozwalają na upuszczanie lub zmianę kolumn w tabeli.

Ponadto niektóre DBMS ograniczają typy danych, które można dodać.

Przykład – dodanie ograniczenia NOT NULL

Oto przykład, który pomoże zademonstrować powyższe punkty.

Oto, co się dzieje, gdy próbuję dodać kolumnę z NOT NULL ograniczenie w SQL Server.

ALTER TABLE Products 
ADD ProductDescription varchar(500) NOT NULL;

Wynik:

Msg 4901, Level 16, State 1, Line 1
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'ProductDescription' cannot be added to non-empty table 'Products' because it does not satisfy these conditions.

Zasadniczo tabela zawiera już dane, więc SQL Server zwraca błąd, który mówi mi, że mogę dodać tylko NOT NULL ograniczenie, jeśli tabela spełnia określone kryteria, a jeszcze ich nie spełnia.

I jest dobry powód dla tych kryteriów.

NOT NULL ograniczenie zapewnia, że ​​nie ma NULL wartości w kolumnie w dowolnym wierszu. Problem polega na tym, że mamy już dane w tabeli i jeśli dodamy nową kolumnę, istniejące wiersze będą miały wartość NULL – co natychmiast naruszy nasze NOT NULL ograniczenie. Dlatego musimy określić dane, aby przejść do istniejących wierszy.

Aby to zrobić, możemy dodać DEFAULT ograniczenie lub podobne, aby zapewnić, że wszystkie istniejące wiersze zostaną automatycznie wypełnione danymi w tej kolumnie.

Przykład:

ALTER TABLE Products 
ADD ProductDescription varchar(500) NOT NULL DEFAULT 'N/A';

To po prostu dodaje DEFAULT ograniczenie do słupa. To ograniczenie zapewnia, że ​​wszystkie wiersze zawierają wartość (w tym przypadku wartość to N/A ), jeśli nie przypisano im wartości. Oznacza to, że nasz NOT NULL ograniczenie nie zostanie naruszone, ponieważ wszystkie istniejące wiersze będą teraz zawierać wartość.

Jeśli nowa kolumna musi mieć unikalne, rosnące wartości, możesz zamiast tego ustawić ją jako IDENTITY kolumna (lub AUTOINCREMENT w SQLite i innych DBMS).

Jeśli jednak tabela nie zawiera jeszcze danych, możesz dodać kolumnę bez konieczności wykonywania żadnego z tych kroków.

Opcje partycji

Ten artykuł jest skierowany do początkujących, a podzielone na partycje tabele są nieco poza zakresem samouczka dla początkujących.

Powiedziawszy to, szybko omówię niektóre opcje partycjonowania w odniesieniu do ALTER TABLE oświadczenie.

Jeśli system DBMS obsługuje tabele partycjonowane, prawdopodobnie zapewnia również opcje partycjonowania za pomocą ALTER TABLE oświadczenie.

Na przykład w MySQL możesz wykonać następujące czynności:

ALTER TABLE Products
PARTITION BY HASH(ProductId)
PARTITIONS 8;

Dzieli tabelę na 8 partycji, za pomocą HASH , używając ProductId kolumna jako klucz partycjonowania.

PARTITION BY HASH używa pozostałej części wyrażenia (w tym przypadku ProductId kolumna) podzielona przez liczbę partycji (tj. moduł).

Możesz także użyć partycji zakresu. Oto jak możesz dodać partycję zakresu do istniejącej tabeli:

ALTER TABLE Products 
ADD PARTITION (PARTITION Partition9 VALUES LESS THAN (2020));

Ten przykład sugeruje, że Products tabela ma już 8 partycji zakresów i dodajemy kolejną partycję o nazwie Partition9 .

Możesz usunąć partycje w ten sposób:

ALTER TABLE Products 
DROP PARTITION Partition8, Partition9;

Pamiętaj, że te przykłady dotyczą MySQL.

Napisałem również kilka artykułów dotyczących tabel partycjonowanych w SQL Server. W odniesieniu do ALTER TABLE instrukcji, oto jak przełączyć partycję i oto jak przełączyć się na partycji (obie te czynności wykonuje się za pomocą ALTER TABLE ).

W SQL Server niektóre opcje partycji muszą być wykonane z innymi instrukcjami. Na przykład łączenie partycji odbywa się za pomocą ALTER PARTITION FUNCTION instrukcja, a dzielenie partycji odbywa się za pomocą ALTER PARTITION SCHEME oświadczenie.

Jeśli chcesz dowiedzieć się więcej o partycjonowanych tabelach w SQL Server, oto jak utworzyć partycjonowaną tabelę w SQL Server.

ALTER TABLE w SQLite

Powinienem również wspomnieć, że SQLite ma bardzo ograniczoną obsługę ALTER TABLE oświadczenie. W SQLite, ALTER TABLE Instrukcja umożliwia zmianę nazwy tabeli, zmianę nazwy kolumny w tabeli lub dodanie nowej kolumny do istniejącej tabeli.

Wszelkie inne zmiany będą wymagały usunięcia tabeli i rozpoczęcia od nowa. Dotyczy to również dodawania kluczy obcych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć dane z Elastisearch

  2. Dziesięć najczęstszych zagrożeń dla jakości planu wykonania

  3. Jak zmienić tekst na małe litery w SQL?

  4. Model bazy danych dla usługi taksówkowej

  5. SQL INSERT dla początkujących