Chciałbym napisać jedno polecenie SQL, aby usunąć wiele kolumn z jednej tabeli w jednej ALTER TABLE
instrukcji.
Z dokumentacji MSDN ALTER TABLE ...
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
Określa, że nazwa ograniczenia lub nazwa kolumny jest usuwana z tabeli. DROP COLUMN nie jest dozwolone, jeśli poziom zgodności wynosi 65 lub wcześniej. Można wymienić wiele kolumn i ograniczeń.
Mówi, że wielokrotne kolumny mogą być wymienione w instrukcji, ale składnia nie pokazuje opcjonalnego przecinka ani niczego, co sugerowałoby nawet składnię.
Jak mam napisać SQL, aby usunąć wiele kolumn w jednej instrukcji (jeśli to możliwe)?
źródło
Zreasumowanie
Oracle :
MS SQL Server :
MySQL :
PostgreSQL
Być świadomym
DROP COLUMN
nie fizycznie usunąć dane dla niektórych DBMS. Np. Dla MS SQL. W przypadku typów o stałej długości ( int , numeryczna , zmiennoprzecinkowa , data- godzina , unikalny identyfikator itp.) Przestrzeń jest zużywana nawet dla rekordów dodanych po upuszczeniu kolumn. Pozbądź się zmarnowanej przestrzeniALTER TABLE ... REBUILD
.źródło
COLUMN
słowo kluczowe jak w MySql.Należy pamiętać, że DROP COLUMN nie usuwa danych fizycznie, a dla typów o stałej długości (int, numeryczna, zmiennoprzecinkowa, datetime, unikalny identyfikator itp.) Przestrzeń jest zużywana nawet dla rekordów dodanych po upuszczeniu kolumn. Pozbądź się zmarnowanej przestrzeni
ALTER TABLE ... REBUILD
.źródło
ALTER INDEX PK_IndexName ON TableName REBUILD
i odzyskałoby to miejsce. Jest to nieco opisane tutaj: msdn.microsoft.com/en-us/library/ms189858.aspx w sekcji „Przebudowa indeksu”.Może to być późno, ale podziel się nim z nowymi użytkownikami odwiedzającymi to pytanie. Rzeczywistą składnią jest upuszczanie wielu kolumn
Tak więc dla każdej kolumny musisz określić „upuść kolumnę” w Mysql 5.0.45.
źródło
Składnia określona przez Microsoft dla upuszczania części kolumny instrukcji ALTER jest następująca
Zauważ, że [, ... n] pojawia się zarówno po nazwie kolumny, jak i na końcu całej klauzuli upuszczania. Oznacza to, że istnieją dwa sposoby usunięcia wielu kolumn. Możesz to zrobić:
albo to
Ta druga składnia jest przydatna, jeśli chcesz połączyć upuszczenie kolumny z usunięciem ograniczenia:
Podczas upuszczania kolumn program SQL Sever nie odzyskuje miejsca zajmowanego przez upuszczone kolumny. W przypadku typów danych przechowywanych w wierszach (na przykład int) może nawet zająć miejsce w nowych wierszach dodanych po instrukcji alter. Aby obejść ten problem, należy utworzyć indeks klastrowany w tabeli lub przebudować indeks klastrowany, jeśli już go ma. Odbudowywanie indeksu można wykonać za pomocą polecenia REBUILD po zmodyfikowaniu tabeli. Ale ostrzegam, że to może być powolne na bardzo dużych stołach. Na przykład:
źródło
W przypadku MySQL (wer. 5.6) nie można upuszczać wielu kolumn za pomocą jednego pojedynczego komunikatu,
drop
ale raczej wieludrop
wpisów:BTW,
drop <col_name>
jest skrótem,drop column <col_name>
jak widać zdrop c3
góry.źródło
Jeśli jest to tylko jedna kolumna, usunięcie poniższej składni działa
ALTER TABLE tablename DROP COLUMN column1;
W przypadku usuwania wielu kolumn przy użyciu opcji nie
DROP COLUMN
działa poniższa składnia działaALTER TABLE tablename DROP (column1, column2, column3......);
źródło
źródło
Rodzajowy:
Na przykład:
źródło
to zapytanie zmieni test na wiele kolumn.
źródło
dla MySQL DB.
Lub możesz dodać kolumnę, zmieniając w tym samym wierszu:
źródło