Direkt zum Hauptinhalt springen
eLearner.app
Modul 9 · Lektion 3 von 435/57 im Kurs~10 min
Lektionen des Moduls (3/4)

Struktur ändern: ALTER TABLE

Die Anforderungen einer Anwendung ändern sich im Laufe der Zeit und die Datenbank muss Schritt halten. ALTER TABLE ist der (äußerst vielseitige) Befehl zum Ändern vorhandener Tabellenschemata, ohne dass diese gelöscht werden müssen (wodurch die darin enthaltenen Daten gefährdet werden).

Spalten ändern (ADD / DROP / ALTER)

Das Hinzufügen einer Spalte erfordert Sorgfalt. Wenn die Tabelle bereits Daten enthält, führt das Hinzufügen einer „NOT NULL“-Spalte zu einem Fehler in Postgres: Was soll in die alten Zeilen eingefügt werden? Sie müssen einen DEFAULT zuordnen.

SQL
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque

-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;

-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;

Nicht nur das Hinzufügen oder Entfernen: Sie müssen häufig den Typ einer Spalte oder eine ihrer Einschränkungen neu konfigurieren:

SQL
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);

-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;

-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;

Einschränkungen zur Laufzeit hinzufügen

Genau wie bei CREATE TABLE können wir ALTER TABLE verwenden, um einen CONSTRAINT an eine Tabelle anzuhängen, die bereits in der Produktions-App verwendet wird.

SQL
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
  ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);

-- Aggiungi un CHECK
ALTER TABLE products
  ADD CONSTRAINT price_positive CHECK (price > 0);

-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;

Umbenennen

Sowohl Spalten als auch Tabellen können umbenannt werden:

SQL
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;

Probieren Sie es aus

Übung#sql.m9.l3.e1
Versuche: 0Wird geladen…

Die Tabelle „Produkte“ verfügt derzeit über eine Spalte „Name“. Ändern Sie die Tabelle, indem Sie die Spalte „Name“ in „Titel“ umbenennen. Verwenden Sie die Operation RENAME COLUMN.

Editor wird geladen…
Hinweis anzeigen

Syntax: ALTER TABLE ... RENAME COLUMN ... TO ...

Lösung nach 3 Versuchen verfügbar

Hinzufügen von Einschränkungen in der Postproduktion

Übung#sql.m9.l3.e2
Versuche: 0Wird geladen…

Ändern Sie die Tabelle „Produkte“, indem Sie eine CHECK-Einschränkung (mit dem Namen „verifica_prezzo“) hinzufügen, die erfordert, dass der Preis (Spalte „Preis“) größer als 0 ist. Die Einschränkung muss hinzugefügt werden, ohne die ursprüngliche Spalte zu löschen.

Editor wird geladen…
Hinweis anzeigen

Syntax: ALTER TABLE Tabelle ADD CONSTRAINT Name CHECK (...)

Lösung nach 3 Versuchen verfügbar