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öschen

Namensrä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

Railroad-Diagramm für CREATE TABLE
Railroad-Diagramm für CREATE TABLE

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.).

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).

Creative Commons Lizenzvertrag


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 .


  1. hier kann ISO/IEC 9075-1:2016 für knapp 200€ erworben werden: https://www.iso.org/standard/63555.html

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: