Die Data Definition Language (DDL) umfasst alle Befehle in SQL, die zur Erzeugung und Bearbeitung von Tabellen in der Datenbank genutzt werden.
Erklärung
Damit Daten in der Datenbank gespeichert werden können, muss zuvor die Tabellen-Struktur in der Datenbank angelegt werden. Anschließend können in die Tabellen die jeweiligen Datensätze eingetragen werden.
Eine Tabelle besteht dabei aus mehreren Attributen (Spalten). Zudem wird beim Erstellen der Tabelle ein Primärschlüssel benötigt. Eine Datenbank, in der es in jeder Tabelle einen Primärschlüssel gibt, wird auch normalisierte Datenbank genannt.
Tabellen erstellen
Eine Tabelle kann in SQL mit folgendem Programmcode erstellt werden:
Besuche die App, um alle Inhalte zu sehen!
Dabei ist CREATE TABLE der Befehl zum Erstellen einer neuen Tabelle. Der Tabellenname muss durch den Namen der Tabelle ersetzt werden (z.B. durch Personen, Städte, etc.). Die Attribute 1-3 bilden die Namen der Spalten (z.B. Vorname, Nachname, Alter).
Datentypen
Jedes Attribut (eine jede Spalte) bekommt bei der Tabellen-Definition einen festen Typ zugewiesen. Dieser Typ gibt an, welche Art von Daten der Attributwert haben muss. So kann vermieden werden, dass falsche Daten eingetragen werden.
Datentypen in SQL:
- INTEGER (Ganze Zahlen)
- float/double (Fließkommazahlen)
- char(n) (Text mit fester Länge n)
- varchar(n) (Text mit bis zu einer Länge n)
- DATE (Datum mit Format yyyy-mm-tt)
- ... und viele mehr, die aber nur sehr selten benötigt werden.
Warum Datentypen - Ein kurzes Beispiel:
Das Attribut "Alter" soll immer als Zahl gespeichert werden. Daher bekommt das Attribut "Alter" den Typ INTEGER (Ganzzahl). So kann später nur die Zahl "17" für das Alter gespeichert werden, nicht aber "Siebzehn".
Weitere Zusätze
Neben dem Datentyp, können auch noch weitere Zusätze hinzugefügt werden. Diese Zusätze bestimmen weitere Bedingungen an die Attributwerte:
- NOT NULL: Der Attributwert muss immer definiert sein/Er darf nicht leer gelassen werden
- UNIQUE: Alle Attributwerte dieses Attributes müssen immer einzigartig sein/Es können keine zwei identischen Attributwerte eingefügt werden
- IDENTITY: Erhöht den Wert des Attributwertes automatisch bei jedem neuen Eintrag um eins
Schlüssel definieren
Neben den obigen gibt es noch weitere Zusätze für die Tabellendefinition. Die wichtigsten Zusätze, die noch fehlen, sind die für die Schlüsseldefinitionen. Es müssen bei der Tabellendefinition auch die Primärschlüssel Attribute explizit definiert werden. Soll ein Attribut später ein Fremdschlüssel sein, so muss dieses auch hier definiert werden.
Primärschlüssel definieren
Der Primärschlüssel einer Tabelle kann auf zwei Arten definiert werden. Einerseits kann hinter dem Typ des Attributes durch PRIMARY KEY festgelegt werden, dass dieses Attribut den Primärschlüssel bildet:
Besuche die App, um alle Inhalte zu sehen!
Alternativ können auch alle Attribute, welche den Primärschlüssel bilden, am Ende der Tabelle im Befehl PRIMARY KEY (Attribut1, Attribut2,...) aufgeführt werden:
Besuche die App, um alle Inhalte zu sehen!
Fremdschlüssel definieren
Auch die Fremdschlüssel müssen in der Tabellen-Definition angegeben werden. Am Besten verwendest du dafür die Notation am Ende der Tabellen-Definition. Wichtig ist, dass zunächst die Tabelle erstellt ist, auf deren Primärschlüssel du mit dem Fremdschlüssel verweisen möchtest! Ein Fremdschlüssel kann NICHT auf eine Tabelle in der Datenbank verweisen, die es noch nicht gibt.
In der Tabelle Personen soll ein Attribut als Fremdschlüssel auf den Primärschlüssel der Tabelle Staedte verweisen. Daher muss zunächst die Tabelle Staedte angelegt werden:
Besuche die App, um alle Inhalte zu sehen!
Jetzt kann beim Erstellen der Tabelle Personen auf die Tabelle Staedte verwiesen werden:
Besuche die App, um alle Inhalte zu sehen!
Alternativ kann der Fremdschlüssel auch am Ende der Tabellendefintion festgelegt werden:
Besuche die App, um alle Inhalte zu sehen!
Wichtig ist, dass Fremdschlüssel und Primärschlüssel denselben Typ haben. Im obigen Fall muss das Attribut Wohnort den Typ INTEGER haben, weil es auf die StadtID verweisen soll, welche auch vom Typ INTEGER ist.
Fremdschlüssel Zusätze
Auch für die Fremdschlüssel gibt es Zusätze, die vor allem dann wichtig werden, wenn Tabellen gelöscht oder verändert werden:
- On delete cascade (Wenn ein Primärschlüssel Datensatz gelöscht wird, dann werden auch alle referenzierten Fremdschlüssel Datensätze gelöscht)
- On update cascade (Wenn ein Primärschlüssels Datensatz geupdated wird, dann werden auch alle referenzierten Fremdschlüssel Datensätze geupdated)
- On delete/update set null (Wenn der Datensatz mit dem Primärschlüssel gelöscht/geupdated wird, dann werden in allen referenzierten Fremdschlüssel Datensätze die Attributwerte des Fremdschlüsselattributs auf NULL gesetzt.)
Tabellen löschen
Der wahrscheinlich coolste SQL Befehl aller Zeiten ist die Anweisung zum Löschen einer Tabelle: DROP TABLE. Damit kannst du die Tabelle ganz einfach aus der Datenbank fallen lassen, sie wird damit gelöscht.
Tabellen bearbeiten
Manchmal ist es notwendig, Tabellen in SQL nachträglich zu verändern. Dazu wird der Befehl "ALTER TABLE" genutzt, gefolgt von der Anweisung, was mit der entsprechenden Spalte geschehen soll.
Attribute hinzufügen
Der Befehl "ADD" fügt eine weitere Spalte mit einem definierten Typ in die Tabelle ein:
Besuche die App, um alle Inhalte zu sehen!
Attribute löschen
Der "DROP"-Befehl gilt nicht nur für ganze Tabellen, sondern kann auch für einzelne Spalten verwendet werden. Hierfür wird "DROP COLUMN" genutzt:
Besuche die App, um alle Inhalte zu sehen!
Attribute verändern
Mit "MODIFY COLUMN" wird eine Spalte verändert. Dabei wird der Typ des Attributes verändert.
Achtung! Die Attributwerte werden in den neuen Typ überführt. Hier kann es zu großen Problemen kommen, weshalb eine Spalte normalerweise nicht verändert werden sollte! Falls es doch zwingend notwendig ist, dann sollten nur kleine Änderungen durchgeführt werden. Hier wird z.B. die Textlänge von varchar(30) auf varchar(60) erhöht. Dabei kommt es zu keinen Problemen, da jeder Text der Länge 30 auch in ein Feld der maximalen Länge 60 passt:
Besuche die App, um alle Inhalte zu sehen!
Beispiel
Es sollen die Tabellen aus dem Kapitel SQL Grundlagen angelegt werden.
Als Erstes musst du die Tabelle Staedte erstellen, da später die Tabelle Personen mit dem Fremdschlüssel darauf verweisen wird. In dieser soll eine jede Stadt später durch die StadtID eindeutig identifizierbar sein. Auch muss jede Stadt einen Namen haben. Zusätzlich sollen noch, falls bekannt, die Einwohnerzahl und das Land gespeichert werden, in dem die Stadt liegt:
Besuche die App, um alle Inhalte zu sehen!
Durch "StadtID INTEGER NOT NULL IDENTITY PRIMARY KEY" erstellt dir SQL später automatisch eine einzigartige ID als Primärschlüssel für die Tabelle Staedte. Durch "Name varchar(30) NOT NULL" erzwingst du, dass ein Stadtname mit angegeben werden muss.
Als Nächstes soll die Tabelle Personen erstellt werden. In dieser soll jede Person später durch eine eindeutige PersonenID identifizierbar sein. Auch muss jede Person einen Vor- und Nachnamen haben. Zusätzlich soll, falls bekannt, das Alter und der Wohnort gespeichert werden. Der Wohnort verweist dabei auf die Tabelle Staedte:
Besuche die App, um alle Inhalte zu sehen!
Durch "FOREIGN KEY(Wohnort) REFERENCES Staedte(StadtID)" definierst du das Attribut Wohnort als Fremdschlüssel, welcher auf die Tabelle Staedte und den dortigen Primärschlüssel StadtID verweist.
Zusätzlich soll nun für die Tabelle Personen gelten: Ändert sich der Primärschlüssel in der Tabelle Staedte, wird auch der entsprechende Fremdschlüssel aktualisiert. Dies gelingt uns durch "ALTER TABLE" und den Zusatz "On update cascade":
Besuche die App, um alle Inhalte zu sehen!
Jetzt sind die Tabellen in die Datenbank eingefügt.