ALTER TABLE ändert die Struktur einer bestehenden Tabelle: Spalten kommen dazu, verschwinden oder ändern ihren Typ. Während CREATE TABLE die Struktur einmalig anlegt, begleitet ALTER TABLE ein Schema über seine gesamte Lebensdauer – jede Anforderung von morgen bedeutet meist ein ALTER von heute.

Spalten hinzufügen und entfernen

ALTER TABLE kunden ADD COLUMN newsletter BOOLEAN DEFAULT FALSE;
ALTER TABLE kunden DROP COLUMN newsletter;

ADD COLUMN hängt eine neue Spalte ans Tabellenende (mit FIRST oder AFTER spalte lässt sich die Position steuern). DROP COLUMN entfernt Spalte samt Daten – unwiderruflich.

Datentypen und Namen ändern

Ein VARCHAR(50), das zu klein wird, lässt sich erweitern:

ALTER TABLE kunden MODIFY COLUMN name VARCHAR(200) NOT NULL;
ALTER TABLE kunden RENAME COLUMN name TO vollname;

MySQL/MariaDB nutzen dafür MODIFY COLUMN, PostgreSQL und SQL Server ALTER COLUMN – die Syntax ist je Datenbank verschieden. Eine Verkleinerung oder ein Typwechsel kann fehlschlagen, wenn vorhandene Daten nicht hineinpassen.

Constraints nachrüsten

ALTER TABLE kunden ADD CONSTRAINT uq_email UNIQUE (email);
ALTER TABLE kunden ADD CONSTRAINT fk_stadt FOREIGN KEY (stadt_id) REFERENCES staedte(id);
ALTER TABLE kunden DROP CONSTRAINT uq_email;

Regeln lassen sich so nachträglich ergänzen, ohne die Tabelle neu aufzubauen – der passende Hintergrund steht bei UNIQUE-, NOT NULL- und CHECK-Constraint.

Migrationen und Online-DDL

Strukturänderungen an großen Tabellen sind heikel: MySQL/MariaDB mit InnoDB können ADD COLUMN seit Version 8.0 bzw. 10.3 oft als INSTANT-Operation nur an den Metadaten ausführen – die Tabelle wird nicht kopiert, der Eingriff dauert Millisekunden. Nicht alle Änderungen sind INSTANT-fähig; manche brauchen einen Tabellen-Rebuild und sperren währenddessen Schreibzugriffe. Deshalb versioniert man Schema-Änderungen in der Praxis über Migrationen (Flyway, Liquibase) statt sie von Hand auf der Produktion auszuführen – der Datenbankschema-Artikel zeigt das Muster.

Fallstricke

  • DDL ist nicht überall transaktional: In MySQL/MariaDB löst jedes ALTER TABLE einen impliziten Commit aus – ein Fehler mittendrin lässt sich nicht zurückrollen. PostgreSQL erlaubt ALTER TABLE dagegen innerhalb von Transaktionen.
  • Metadaten-Sperren: Läuft gerade eine lange Abfrage auf der Tabelle, wartet das ALTER (oder blockiert umgekehrt neue Anfragen).
  • NOT NULL ohne DEFAULT: Das Nachrüsten auf eine Spalte mit Bestandsdaten schlägt fehl, solange NULL-Werte existieren.
  • Mehrere Änderungen: Viele Datenbanken erlauben ALTER TABLE ... ADD COLUMN a ..., ADD COLUMN b ... in einem Statement – das ist schneller und atomarer als Einzelbefehle.

Wer eine Tabelle komplett loswerden will, findet die Unterschiede bei DROP TABLE.