Kurs
In SQL gibt es im Wesentlichen drei Arten von Befehlen:
-
DDL – steht für Data Definition Language und umfasst SQL-Befehle zur Definition der Datenbank, etwa zum Erstellen von Tabellen, Festlegen von Spezifikationen, Ändern von Tabellen usw. Beispiele für DDL sind
CREATE,DROP,ALTERusw. Änderungen durch DDL-Befehle lassen sich nicht zurückrollen. -
DML – steht für Data Manipulation Language und ermöglicht das Ausführen von Select-, Insert-, Update- und Delete-Abfragen. Änderungen durch DML-Befehle können zurückgerollt werden. Beispiele:
SELECT,INSERT,UPDATEundDELETE. -
DCL – steht für Data Control Language und dient zum Festlegen von Rechten, Berechtigungen und weiteren Kontrollen deines Datenbanksystems.
In diesem Tutorial lernst du den Einsatz der Anweisung ALTER TABLE, die zur DDL gehört. Folgende Inhalte werden behandelt:
- Warum die Anweisung
ALTER TABLEbenötigt wird - Erstellen einer Tabelle in einer PostgreSQL-Datenbank
- Ausführen verschiedener
ALTER TABLE-Anweisungen in PostgreSQL
Hinweis: Dieses Tutorial erklärt nicht das Erstellen von Tabellen, das Einfügen von Daten oder das Abfragen von Daten in PostgreSQL. Wenn du dazu eine Auffrischung brauchst, schau dir diesen Artikel an.
Warum die ALTER TABLE-Anweisung?
Die Anforderungen an eine Datenbank ändern sich mit der Zeit. Du musst zum Beispiel eine Spalte zu einer Tabelle hinzufügen oder einen Primärschlüssel ergänzen. Eventuell möchtest du auch den Datentyp einer Spalte ändern. Eine Tabelle zu droppen und komplett neu zu erstellen, ist oft keine Option. Mit ALTER TABLE erledigst du all das nahtlos. Mit ALTER TABLE kannst du:
- Eine Spalte hinzufügen, ändern oder entfernen
- Eine Constraint hinzufügen oder entfernen
Du kannst Constraints auch aktivieren/deaktivieren, das liegt jedoch außerhalb dieses Tutorials.
Die oben genannten Anwendungsfälle schauen wir uns gleich an. Zuerst brauchst du jedoch eine Tabelle in PostgreSQL, um loszulegen. Im nächsten Abschnitt erstellst du eine einfache Tabelle.
Erstellen einer Tabelle in einer PostgreSQL-Datenbank
Du erstellst in PostgreSQL (mit dem Tool pgAdmin) eine Tabelle namens student_details mit folgenden Spalten und Datentypen:
- student_id (integer)
- student_full_name (character)
- student_year (integer)
Du startest mit dieser Tabelle mit nur drei Spalten. Im Verlauf des Tutorials fügst du weitere Spalten hinzu und nimmst verschiedene Änderungen vor. Die folgende CREATE-Abfrage erzeugt eine Tabelle nach den obigen Spezifikationen:
CREATE TABLE student_details(
student_id SERIAL,
student_full_name VARCHAR (50),
student_year VARCHAR (100)
);
Lass uns auch ein paar Datensätze einfügen:
INSERT INTO student_details(student_full_name, student_year) VALUES('John Doe','1st');INSERT INTO student_details(student_full_name, student_year) VALUES('Chris Villa','3rd');
Da der Datentyp von student_id auf SERIAL gesetzt ist, erhöht PostgreSQL den Spaltenwert automatisch, und der Datentyp wird standardmäßig als integer interpretiert.
Die Tabelle student_details sollte so aussehen:

Damit ist die Tabelle in PostgreSQL eingerichtet. Schauen wir uns nun im nächsten Abschnitt verschiedene Einsatzmöglichkeiten von ALTER TABLE an.
Verschiedene ALTER TABLE-Anweisungen in PostgreSQL ausführen
In diesem Abschnitt nutzt du ALTER TABLE auf zwei der oben genannten Arten:
- Spalten hinzufügen, ändern und löschen
- Constraints hinzufügen und löschen
Spalte hinzufügen, ändern oder löschen
Beginnen wir damit, eine weitere Spalte namens student_grade (vom Typ character) zur Tabelle hinzuzufügen:
ALTER TABLE student_details ADD student_grade VARCHAR(5);
Jetzt sollte die Tabelle so aussehen:

Beachte, dass für die bereits vorhandenen Einträge die Werte in der Spalte student_grade null sind. Das wird in den meisten RDBMS implizit so gesetzt. Natürlich kannst du per UPDATE-Abfrage Werte nachtragen. Sehen wir uns nun an, wie du mit ALTER TABLE eine Spalte änderst. Du reduzierst die maximal zulässige Länge der Spalte student_year von 100 auf 10, denn für Werte wie 1st, 2nd oder 3rd wäre zu viel Platz vergeudet.
ALTER TABLE student_details ALTER COLUMN student_year TYPE VARCHAR(10);
Das Ergebnis siehst du in der folgenden Abbildung:

Du kannst auch eine Spalte umbenennen. So geht's:
ALTER TABLE student_details RENAME student_id TO student_roll;
Die obige Abfrage benennt die Spalte student_id in student_roll um. Du kannst das mit einer SELECT-Abfrage prüfen, dein Ergebnis sollte ähnlich wie in der folgenden Abbildung aussehen:

So entfernst du eine Spalte aus einer Tabelle:
ALTER TABLE student_details DROP COLUMN student_year;
Die Abfrage entfernt die Spalte student_year, und die Tabelle sieht danach so aus:

Beachte, dass es zu Verletzungen der referenziellen Integrität kommen kann, wenn die zu löschende Spalte in einer anderen Tabelle referenziert wird.
Als Nächstes fügst du Constraints hinzu bzw. entfernst sie wieder.
Constraint hinzufügen und löschen.
Die Tabelle student_details hat noch keinen Primärschlüssel. Ein Primärschlüssel kombiniert die Constraints NOT NULL und UNIQUE. Lege nun die Spalte student_roll (zuvor student_id) als Primärschlüssel von student_details fest:
ALTER TABLE student_details ADD PRIMARY KEY (student_roll);
Du kannst auch andere Constraints hinzufügen, zum Beispiel ein CHECK-Constraint für die Spalte student_grade, sodass deren Werte immer A, B oder C sind.
ALTER TABLE student_details ADD CONSTRAINT year_check CHECK (student_grade IN ('A', 'B', 'C'));
year_check ist der Name des Constraints, das du zur Tabelle hinzufügst. Wenn du nun den folgenden Eintrag einfügst, solltest du einen Fehler erhalten:
INSERT INTO student_details(student_full_name, student_grade) VALUES('David Lune','3rd');
Der Fehler sieht so aus:

Das Löschen eines Constraints funktioniert ähnlich. Du musst den Namen des zu löschenden Constraints angeben. Löschen wir nun das Constraint mit dem Namen year_check:
ALTER TABLE student_details DROP CONSTRAINT year_check;
Prüfen wir das. Wenn das Constraint year_check tatsächlich entfernt wurde, sollte diese Abfrage INSERT INTO student_details(student_full_name, student_grade) VALUES('David Lune','3rd'); keinen Fehler mehr verursachen. Die Tabelle enthält den Datensatz nun:

Du kannst auch mit weiteren CHECK-Constraints experimentieren.
Das war's mit diesem Tutorial!
Dieses Tutorial hat dir die Anweisung ALTER TABLE vorgestellt, mit der du das Schema einer Tabelle gezielt ändern kannst. Wenn du deine SQL-Kompetenzen aufs nächste Level bringen möchtest, könnten dich diese DataCamp-Kurse interessieren: