Data Definition Language (SQL-DDL)
https://oer-informatik.de/sql-ddl-basics
tl/dr; SQL besteht aus mehreren Teilsprachen, die sich mit der Datenbankstruktur (DDL), dem Datenbankinhalt (DML) und den Berechtigungen (DCL) beschäftigen. In diesem Artikel soll es zunächst um die Grundlagen der Strutur gehen, die in der Data Definition Language (SQL-DDL) beschrieben wird.
Einstieg in die Data Definition Language (DDL)
Struktureinheiten in der DDL
Die meisten Datenbankmanagementsysteme gliedern die Daten in unterschiedlichen Strukturen:
Datenbanken sind in der Regel die oberste Struktur, in der alles Weitere organisiert ist.
Schema sind Einheiten, die mehrere unterschiedliche Tabellen zusammenfasst. Sie bilden Namensräume, innerhalb derer Bezeichner eindeutig sind. Nicht alle Datenbankmanagementsysteme arbeiten mit Schema.
Tabellen schließlich sind die Struktur, die die eigentliche Datenmenge speichert (die Datensätze, die wir in Entitätstypen und Relationen gegliedert hatten).
Für jede dieser Einheiten stellt die DDL Befehle zum Erstellen, Lesen, Ändern und Löschen bereit. Diese Abfolge (Create, Read, Update, Delete - kurz C.R.U.D.) wird uns im Verlauf der Datenbankarbeit noch häufiger begegnen.
Die Sache mit dem Standard und der Realität…
SQL ist ein offizieller ISO/IEC-Standard, der die Grammatik von SQL-Statements festlegen soll (aktuell: ISO/IEC 9075-1:2016 1). Eine frühe Version dieses Standards, SQL-92
bildet die Basis der Abfragesprachen aller relationalen Datenbankmanagementsysteme. Über diese Basis hinaus hat jedes System seine eigenen Sprachbestandteile entwickelt, die in der Struktur ähnlich, in der konkreten Ausprägung jedoch unterschiedlich sind. Es gibt große Überschneidungen bei trivialen SQL-Abfragen, aber im Detail unterscheiden sich die SQL-Implementierungen erheblich.
Ich werde versuchen auf die ein oder andere Implementierungseigenheit einzugehen: die unterschiedlichen Datentypen, unterschiedliche Bezeichnungen usw. Daher habe ich in einigen Bereichen Tabellen, in denen die verbreitetsten Dialekte einzeln aufgeführt sind. Ich werde Stück für Stück versuchen, diese Tabellen zu füllen - zu Beginn werden aber viele Zellen noch leer bleiben. Leere Zellen im Folgenden heißen also nicht, dass der entsprechende Befehl in diesem SQL-Dialekt nicht vorhanden ist. Wer mag, kann mir gerne dabei helfen, die entsprechenden Lücken zu füllen! Ich habe entschieden, die folgenden Datenbankmanagement-Systeme ins Augenmerk zu nehmen: MS SQL-Server (T-SQL), MySQL / MariaDB, postgreSQL, OracleDB, SQLite.
Datenbanken verwalten
Die übergeordnete Struktureinheit in DBMS sind Datenbanken. In der Regel ist es sinnvoll, nicht die Standarddatenbank des DBMS für eigene Tabellen zu nutzen - daher muss eine eigene Datenbank erzeugt und verwaltet werden.
Datenbank erzeugen
Die Erzeugung von Datenbanken erfolgt in den meisten DBMS noch sehr nah am Standard.
postgreSQL: Innerhalb einer Verbindung können keine Databases
erzeugt werden, da diese jeweils bei der Connection übergeben werden.
Datenbank auswählen
Vorhandene Datenbanken anzeigen
MSSQL | MySQL / MariaDB | postgreSQL | OracleDB | SQLite | |
---|---|---|---|---|---|
SELECT Name from sys.Databases |
SHOW DATABASES; |
SELECT datname FROM pg_database; |
Datenbanken anpassen
Die meisten Eigenschaften einer Datenbank lassen sich auch im Nachgang noch anpassen. Das Schlüsselwort dazu lautet ALTER DATABASE
:
MySQL verfügt über mehrere unterschiedliche Tabellenengines - beispielsweise war früher die Engine MyISAM voreingestellt, heute ist es i.d.R: InnoDB. Per DDL-Befehl kann zwischen unterschiedlichen Engines gewechselt werden:
### Datenbank löschenNamensräume in Schema verwalten
Nicht jedes DBMS nutzt Schema zur Gliederung von Namensräumen. Einige nutzen es, ohne, dass man es merkt. Bei anderen wundert man sich, dass in jedem Befehl eine vermeintlich nutzlose Zeichenkette mitgegeben wird. So wird in MS SQL-Server beispielsweise immer das Standardschema dbo
in Befehlen angegeben.
Neues Schema erzeugen
MariaDB verwendet keine Schema und nutzt die Begriffe DATABASE
und SCHEMA
in Befehlen synonym.
Vorhandene Datenbanken anzeigen
MSSQL | MySQL / MariaDB | postgreSQL | OracleDB | SQLite | |
---|---|---|---|---|---|
SELECT Name from sys.Schemas |
Tabellen bearbeiten
Namensgebung
Die einzelnen DBMS haben jeweils eigene Namensregeln. Eine sinnvolle Namensregel lautet etwa:
Erstes Zeichen muss ein Buchstabe sein, danach bis zu 29 Zeichen, Groß- oder Kleinbuchstaben, Zahlen, Underscore, Dollar oder Raute, als RegEx:
[A-Za-z] [A-Za-z0-9_\$\#]{0,29}
.In der Regel behandeln die DBMS Tabellennamen nicht casesensitive, sofern das DBMS jedoch in einem Dateisystem abgespeichert wird, dass casesensitive ist, kann es zu Komplikationen führen. Daher: besser nur Kleinbuchstaben verwenden.
Tabellennamen sollte im Plural gehalten sein (Konvention, nicht Dogma).
Tabellen erzeugen

Neben den Datentypen (siehe Datentyps-Übersicht) können beim Erzeugen / Anpassen von Tabellen auch Constraints festgelegt werden. Details finden sich auf der gesonderten Übersicht zu Constraints.
Tabellenstruktur anpassen
Tabellen verändern:
In MySQL kann zusätzlich die Position des neuen Attributs bestimmt werden, in dem AFTER vorgaengerAttribut
ergänzt wird.
Datentyp eines Merkmals ändern:
Merkmale umbenennen:
Merkmale löschen:
Tabellenname anpassen
Tabellen anzeigen
MSSQL | MySQL / MariaDB | postgreSQL | OracleDB | SQLite | |
---|---|---|---|---|---|
SELECT Name from sys.Tables |
SHOW TABLES; |
Tabellenstruktur anzeigen
In MySQL/MariaDB kann man die Tabellenstruktur per Abfrage ausgeben lassen:
Tabellen löschen
Allgemeine Infos zum Tabellenerstellen
Um Tabellen passgenau erstellen zu können, benötigen wir Wissen über die verfügbaren Grundlagen zum Tabellen- und Datenbankerstellen, die Datentypen sowie die Constraints (wie Schlüsselattribute, Eingabepflicht usw.).
Links und weitere Informationen
Quellen und offene Ressourcen (OER)
Die Ursprungstexte (als Markdown), Grafiken und zugrunde liegende Diagrammquelltexte finden sich (soweit möglich in weiterbearbeitbarer Form) in folgendem git-Repository:
https://gitlab.com/oer-informatik/db-sql/ddl-basics.
Sofern nicht explizit anderweitig angegeben sind sie zur Nutzung als Open Education Resource (OER) unter Namensnennung (H. Stein, oer-informatik.de) freigegeben gemäß der Creative Commons Namensnennung 4.0 International Lizenz (CC BY 4.0).
Note on reuse
This work and its contents are licensed under CC BY 4.0 unless otherwise noted. Attribution according to TASLL rule please as follows: “Data Definition Language (SQL-DDL)” by Hannes Stein, license: CC BY 4.0. The sources of this work are available on .
hier kann ISO/IEC 9075-1:2016 für knapp 200€ erworben werden: https://www.iso.org/standard/63555.html↩