Ich möchte einen einzelnen SQL-Befehl schreiben, um mehrere Spalten aus einer einzelnen Tabelle in einer zu löschen ALTER TABLE
Anweisung löschen.
Aus der ALTER TABLE-Dokumentation von MSDN ...
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
Gibt an, dass der Einschränkungsname oder der Spaltenname aus der Tabelle entfernt wird. DROP COLUMN ist nicht zulässig, wenn die Kompatibilitätsstufe 65 oder früher ist. Es können mehrere Spalten und Einschränkungen aufgelistet werden.
Es heißt, dass mehrere Spalten in der Anweisung aufgeführt werden können, die Syntax jedoch kein optionales Komma oder irgendetwas anzeigt, das sogar auf die Syntax hinweisen würde.
Wie soll ich meine SQL schreiben, um mehrere Spalten in einer Anweisung zu löschen (wenn möglich)?
quelle
Zusammenfassen
Oracle :
MS SQL Server :
MySQL :
PostgreSQL
Sei vorsichtig
DROP COLUMN
entfernt die Daten für einige DBMS nicht physisch . ZB für MS SQL. Bei Typen mit fester Länge ( int , numerisch , float , datetime , uniqueidentifier usw.) wird der Speicherplatz auch für Datensätze belegt, die nach dem Löschen der Spalten hinzugefügt wurden. Um den verschwendeten Platz loszuwerden, tun SieALTER TABLE ... REBUILD
.quelle
COLUMN
Schlüsselwörter wie in MySql weglassen .Beachten Sie, dass DROP COLUMN die Daten nicht physisch entfernt und bei Typen mit fester Länge (int, numerisch, float, datetime, uniqueidentifier usw.) der Speicherplatz auch für Datensätze belegt wird, die nach dem Löschen der Spalten hinzugefügt wurden. Um den verschwendeten Platz loszuwerden, tun Sie
ALTER TABLE ... REBUILD
.quelle
ALTER INDEX PK_IndexName ON TableName REBUILD
und es würde den Speicherplatz zurückfordern. Dies wird hier etwas beschrieben: msdn.microsoft.com/en-us/library/ms189858.aspx unter dem Abschnitt " Wiederherstellen eines Index".Dies kann zu spät sein, aber teilen Sie es für die neuen Benutzer, die diese Frage besuchen. Um mehrere Spalten zu löschen, ist die tatsächliche Syntax
Daher müssen Sie für jede Spalte in Mysql 5.0.45 "drop column" angeben.
quelle
Die von Microsoft angegebene Syntax für das Löschen eines Spaltenteils einer ALTER- Anweisung lautet wie folgt
Beachten Sie, dass [, ... n] sowohl nach dem Spaltennamen als auch am Ende der gesamten drop-Klausel angezeigt wird. Dies bedeutet, dass es zwei Möglichkeiten gibt, mehrere Spalten zu löschen. Sie können dies entweder tun:
oder dieses
Diese zweite Syntax ist nützlich, wenn Sie das Löschen einer Spalte mit dem Löschen einer Einschränkung kombinieren möchten:
Beim Löschen von Spalten stellt SQL Server den von den abgelegten Spalten belegten Speicherplatz nicht wieder her. Bei Datentypen, die in den Zeilen inline gespeichert sind (z. B. int), wird möglicherweise sogar Platz in den neuen Zeilen belegt, die nach der alter-Anweisung hinzugefügt werden. Um dies zu umgehen, müssen Sie einen Clustered-Index für die Tabelle erstellen oder den Clustered-Index neu erstellen, falls er bereits einen hat. Die Neuerstellung des Index kann nach dem Ändern der Tabelle mit einem REBUILD-Befehl erfolgen. Aber seien Sie gewarnt, dies kann an sehr großen Tischen langsam sein. Beispielsweise:
quelle
Für MySQL (Version 5.6) können Sie nicht mehrere Spalten mit einer einzigen
drop
Anweisung löschen, sondern mehreredrop
Anweisungen:Übrigens,
drop <col_name>
ist eine Abkürzung für,drop column <col_name>
wie Sie vondrop c3
oben sehen können.quelle
Wenn es nur eine einzelne Spalte zum Löschen ist, funktioniert die folgende Syntax
ALTER TABLE tablename DROP COLUMN column1;
Beim Löschen mehrerer Spalten
DROP COLUMN
funktioniert die folgende Syntax nichtALTER TABLE tablename DROP (column1, column2, column3......);
quelle
quelle
Generisch:
Z.B:
quelle
Diese Abfrage ändert den mehrspaltigen Test.
quelle
für MySQL DB.
Oder Sie können eine Spalte hinzufügen, während Sie in derselben Zeile ändern:
quelle