Data Definition Language (DDL) und Data Manipulation Language (DML)

Einführung

Wie entsteht eigentlich eine Datenbanktabelle, bevor die ersten Daten darin landen? Und wie werden diese Daten dann hinzugefügt, geändert oder gelöscht?

Die Antwort liegt in der Trennung von Struktur und Inhalt: DDL und DML.

Stell dir vor, du baust ein Haus: Zuerst planst du den Grundriss und ziehst Wände ein. Erst dann richtest du die Räume ein. Genauso funktionieren Datenbanken: DDL (Data Definition Language) baut das “Haus”, DML (Data Manipulation Language) richtet es ein und belebt es.

Lernziele

Nach dieser Lerneinheit kannst du:

  • erklären, was DDL und DML sind und worin sie sich unterscheiden.
  • anwenden, wie du mit DDL-Befehlen (CREATE, ALTER, DROP, TRUNCATE) die Datenbankstruktur verwaltest.
  • anwenden, wie du mit DML-Befehlen (INSERT, SELECT, UPDATE, DELETE) Daten erstellst, liest, änderst und löschst.
  • erkennen, welche typischen Fehler bei UPDATE und DELETE ohne WHERE-Klausel entstehen.

Was ist Data Definition Language (DDL)?

Die DDL umfasst alle SQL-Befehle, die die Struktur bzw. das Schema der Datenbank definieren und verwalten. Man kann sie sich als das digitale Reißbrett und die Bauwerkzeuge des Datenbank-Architekten vorstellen. DDL-Befehle erstellen, verändern oder löschen die Container, in denen die Daten später leben werden. Sie arbeiten nicht mit den Daten selbst, sondern nur mit deren “Hülle”.

Warum ist DDL wichtig?

DDL ist die Grundlage für Datenqualität und Datenintegrität. Bevor auch nur ein einziger Datensatz gespeichert wird, zwingt DDL dazu, sich über Datentypen, Regeln (Constraints) und Beziehungen Gedanken zu machen.

Eine gut geplante Struktur verhindert unsinnige oder unvollständige Daten und bildet das Rückgrat einer stabilen Anwendung.

Die wichtigsten DDL‑Befehle

CREATE

Ein neues Datenbankobjekt erstellen (Tabelle, Index, View, Schema etc.). Am häufigsten wird CREATE TABLE verwendet.

Beispiel: Tabelle für Benutzer anlegen

CREATE TABLE Benutzer (
    UserID INT PRIMARY KEY AUTO_INCREMENT,
    Username VARCHAR(50) NOT NULL UNIQUE,
    PasswortHash VARCHAR(255) NOT NULL,
    RegistriertAm DATE DEFAULT CURRENT_DATE
);

Erklärung:

  • UserID INT PRIMARY KEY AUTO_INCREMENT: Primärschlüssel, eindeutiger Identifikator; die DB vergibt automatisch fortlaufende Werte.
  • Username VARCHAR(50) NOT NULL UNIQUE: Pflichtfeld; jeder Username darf nur einmal vorkommen.
  • PasswortHash VARCHAR(255) NOT NULL: Speicherung des Hash‑Werts (niemals Klartext‑Passwörter!).
  • RegistriertAm DATE DEFAULT CURRENT_DATE: Fehlt ein Wert, setzt die DB das aktuelle Datum.

Die wichtigsten DDL‑Befehle

ALTER

Struktur eines bestehenden Objekts ändern (Spalten hinzufügen/entfernen/umbenennen, Datentypen ändern, Constraints ergänzen usw.).

Beispiel: Spalte für E‑Mail hinzufügen

ALTER TABLE Benutzer
ADD COLUMN Email VARCHAR(100);

Erklärung: Fügt die Spalte Email hinzu; bestehende Zeilen erhalten zunächst den Wert NULL (sofern nicht anders definiert).

Die wichtigsten DDL-Befehle

DROP

Ein Datenbankobjekt unwiderruflich löschen.

Beispiel: Benutzer-Tabelle komplett entfernen

DROP TABLE Benutzer;

Achtung: Löscht Tabelle und alle Daten, Indizes, ggf. abhängige Objekte. Nur mit Sicherung/Backups einsetzen.

Die wichtigsten DDL-Befehle

TRUNCATE

Zweck: Alle Datensätze einer Tabelle extrem schnell entfernen; die Tabellenstruktur bleibt bestehen.

Beispiel: Tabelle leeren (z. B. in Tests)

TRUNCATE TABLE Benutzer;

Wichtige Unterschiede zu DELETE (DML):

  • Performance: Sehr schnell, da nicht zeilenbasiert protokolliert.
  • Trigger: Löst i. d. R. keine ON DELETE-Trigger aus.
  • Transaktionen: Je nach DBMS nicht rückgängig zu machen (ROLLBACK); Verhalten prüfen.

DDL-Befehle im Überblick

Die wichtigsten DDL-Befehle auf einen Blick:

  • CREATE — Neue Datenbankobjekte erstellen (Tabellen, Views, Indizes)
  • ALTER — Bestehende Strukturen ändern (Spalten hinzufügen, umbenennen, Datentypen anpassen)
  • DROP — Objekte unwiderruflich löschen (Vorsicht: auch alle Daten werden gelöscht!)
  • TRUNCATE — Alle Datensätze schnell entfernen, Struktur bleibt erhalten

Was ist Data Manipulation Language (DML)?

Die DML umfasst alle SQL‑Befehle, die die Daten innerhalb der Tabellen manipulieren. DML ist das Werkzeug für die tägliche Anwendungsarbeit: Daten erstellen, lesen, aktualisieren und löschen. Sie interagiert mit den Zeilen in den Tabellen, die zuvor durch DDL erschaffen wurden.

Warum DML?

Nahezu jede Interaktion eines Endbenutzers wird in DML übersetzt: Ein Klick auf „Speichern“ entspricht INSERT oder UPDATE, das Anzeigen einer Liste einem SELECT. DML ist die Brücke zwischen Anwendungslogik und Datenhaltung.

Die wichtigsten DML‑Befehle (CRUD)

INSERT (Create)

Einen oder mehrere neue Datensätze einfügen.

Beispiel: Benutzer registrieren

-- In einer echten Anwendung wird hier der Hash eines sicheren Passwort-Algorithmus gespeichert.
INSERT INTO Benutzer (Username, PasswortHash, Email)
VALUES ('MaxMuster', 'hash_von_sicherem_passwort', 'max@muster.de');

Hinweis: UserID muss dank AUTO_INCREMENT nicht angegeben werden.

Die wichtigsten DML‑Befehle (CRUD)

SELECT (Read)

Daten aus einer oder mehreren Tabellen lesen.

Beispiel: Benutzername und E‑Mail eines bestimmten Benutzers

SELECT Username, Email
FROM Benutzer
WHERE UserID = 1;

Erklärung:

  • SELECT Username, Email: Gewünschte Spalten.
  • FROM Benutzer: Quelltabelle.
  • WHERE UserID = 1: Filterbedingung – ohne WHERE kämen alle Benutzer zurück.

Die wichtigsten DML‑Befehle (CRUD)

UPDATE (Update)

Daten bestehender Zeilen ändern.

Beispiel: E‑Mail eines Nutzers korrigieren

UPDATE Benutzer
SET Email = 'max.mustermann@neuedomain.de'
WHERE UserID = 1;

Achtung: Die WHERE‑Klausel ist kritisch – ohne sie würden alle Zeilen geändert.

Die wichtigsten DML-Befehle (CRUD)

DELETE (Delete)

Einen oder mehrere Datensätze löschen.

Beispiel: Konkreten Benutzer entfernen

DELETE FROM Benutzer
WHERE UserID = 1;

Achtung: Auch hier verhindert WHERE, dass versehentlich alle Zeilen gelöscht werden.

DML-Befehle (CRUD) im Überblick

Die wichtigsten DML-Befehle (CRUD) auf einen Blick:

  • INSERT (Create) — Neue Datensätze in Tabellen einfügen
  • SELECT (Read) — Daten aus Tabellen lesen und filtern
  • UPDATE (Update) — Bestehende Datensätze ändern (WHERE nicht vergessen!)
  • DELETE (Delete) — Datensätze löschen (WHERE nicht vergessen!)

DDL vs. DML

AspektDDLDML
FokusStruktur/SchemaDaten/Zeilen
Typische BefehleCREATE, ALTER, DROP, TRUNCATEINSERT, SELECT, UPDATE, DELETE
TransaktionenTeils nicht rückgängig (DBMS‑abhängig)Voll transaktional (üblich)
TriggerStruktur‑/DDL‑Trigger selten; TRUNCATE feuert i. d. R. keine DELETE‑TriggerINSERT/UPDATE/DELETE lösen entsprechende Trigger aus
EinsatzzeitpunktVor/nach Deployment, MigrationenLaufzeit der Anwendung

Merksatz: DDL baut das Haus, DML richtet es ein und belebt es.

⏳ Lädt Dataview-Inhalt...

Anwendung in der Praxis

Schritt 1: Die Grundanforderung (Version 1.0)

Anforderung: „Als Benutzer möchte ich Aufgaben erstellen und ansehen können, damit ich meine Arbeit organisiere.“

Überlegung des Entwicklers: Du brauchst eine Tabelle, um Aufgaben zu speichern. Jede Aufgabe soll eine eindeutige ID, einen Titel, eine optionale Beschreibung, einen Status (z. B. „Offen“) und ein Erstellungsdatum haben.

Aktion (DDL – CREATE TABLE):

-- Erstellt die initiale Struktur für Aufgaben
CREATE TABLE Aufgaben (
    AufgabenID INT PRIMARY KEY AUTO_INCREMENT, -- Automatisch hochzählende ID
    Titel VARCHAR(255) NOT NULL,               -- Titel muss immer angegeben werden
    Beschreibung TEXT,                         -- Beschreibung ist optional
    Status VARCHAR(20) DEFAULT 'Offen' NOT NULL, -- Standardstatus: 'Offen'
    ErstelltAm TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Automatischer Zeitstempel
);

Erklärung: Hier wird eine neue Tabelle Aufgaben erzeugt. Die Datenbank vergibt für jede Aufgabe automatisch eine ID, trägt den Status standardmäßig als „Offen“ ein und speichert den Zeitpunkt der Erstellung. So entsteht die Grundstruktur.

Praxis-Hinweis: Ein Status als Textfeld kann zu Fehlern führen (z. B. Tippfehler). Besser wäre eine separate Status-Tabelle oder ein ENUM-Datentyp.

Anwendung in der Praxis

Schritt 2: Implementierung der Kernlogik (DML)

Anforderung: Der Benutzer speichert eine neue Aufgabe. Danach sollen alle offenen Aufgaben angezeigt werden.

Überlegung des Entwicklers: Neue Daten einfügen erfolgt mit INSERT. Aufgaben anzeigen geht mit SELECT und einer Bedingung.

Aktion 1 (DML – INSERT):

-- Fügt eine neue Aufgabe in die Tabelle ein
INSERT INTO Aufgaben (Titel, Beschreibung)
VALUES ('Lerneinheit SQL fertigstellen', 'Kapitel 2 und 3 basierend auf Feedback überarbeiten.');

Erklärung: Mit diesem Befehl wird eine Aufgabe gespeichert. Titel und Beschreibung gibt der Benutzer an. ID, Status und Erstellungszeitpunkt ergänzt die Datenbank automatisch.

Aktion 2 (DML – SELECT):

-- Liest alle offenen Aufgaben
SELECT Titel, Status, ErstelltAm
FROM Aufgaben
WHERE Status = 'Offen';

Erklärung: Diese Abfrage zeigt nur Aufgaben mit dem Status „Offen“. Angezeigt werden Titel, Status und Zeitpunkt der Erstellung. Ohne WHERE würden alle Aufgaben erscheinen.

Anwendung in der Praxis

Schritt 3: Neue Anforderung (Version 1.1)

Anforderung: „Als Benutzer möchte ich ein Fälligkeitsdatum eintragen können, damit ich Deadlines nicht verpasse.“

Überlegung des Entwicklers: Die Tabelle muss erweitert werden. Dazu nutzt du ALTER TABLE. Das Datum trägst du mit UPDATE ein.

Aktion 1 (DDL – ALTER TABLE):

-- Fügt eine neue Spalte für das Fälligkeitsdatum hinzu
ALTER TABLE Aufgaben
ADD COLUMN Faelligkeitsdatum DATE;

Erklärung: Die Tabelle bekommt eine zusätzliche Spalte Faelligkeitsdatum. Bestehende Aufgaben bleiben erhalten und haben in diesem Feld zunächst keinen Wert (NULL).

Aktion 2 (DML – UPDATE):

-- Aktualisiert eine Aufgabe mit einem Fälligkeitsdatum
UPDATE Aufgaben
SET Faelligkeitsdatum = '2025-09-30'
WHERE AufgabenID = 1;

Erklärung: Hier wird für die Aufgabe mit der ID 1 ein Fälligkeitsdatum eingetragen. Die WHERE-Bedingung ist entscheidend, damit nur diese eine Aufgabe geändert wird.

Übersicht: Vom Plan zur Anwendung

SchrittDDL-AktionDML-AktionErgebnis
1.0CREATE TABLE AufgabenStruktur erstellt
2.0INSERT, SELECTAufgaben anlegen und anzeigen
3.0ALTER TABLE um DatumUPDATE für FälligkeitsdatumFunktion erweitert

Vollständiger Code in zeitlicher Reihenfolge

-- Schritt 1: Tabelle anlegen
CREATE TABLE Aufgaben (
    AufgabenID INT PRIMARY KEY AUTO_INCREMENT,
    Titel VARCHAR(255) NOT NULL,
    Beschreibung TEXT,
    Status VARCHAR(20) DEFAULT 'Offen' NOT NULL,
    ErstelltAm TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
 
-- Schritt 2: Neue Aufgabe hinzufügen
INSERT INTO Aufgaben (Titel, Beschreibung)
VALUES ('Lerneinheit SQL fertigstellen', 'Kapitel 2 und 3 basierend auf Feedback überarbeiten.');
 
-- Schritt 2: Offene Aufgaben anzeigen
SELECT Titel, Status, ErstelltAm
FROM Aufgaben
WHERE Status = 'Offen';
 
-- Schritt 3: Tabelle erweitern
ALTER TABLE Aufgaben
ADD COLUMN Faelligkeitsdatum DATE;
 
-- Schritt 3: Fälligkeitsdatum für Aufgabe setzen
UPDATE Aufgaben
SET Faelligkeitsdatum = '2025-09-30'
WHERE AufgabenID = 1;

Erklärung: Der Ablauf startet mit der Erstellung der Tabelle. Danach wird eine Aufgabe gespeichert und abgefragt. Anschließend wird die Struktur erweitert und ein Fälligkeitsdatum ergänzt. Damit siehst du, wie sich ein Feature Schritt für Schritt entwickelt.

⏳ Lädt Dataview-Inhalt...

Zusammenfassung und Ausblick

Zusammenfassung

Data Definition Language (DDL)

Die DDL umfasst Befehle, mit denen du das Schema einer Datenbank definierst und verwaltest. Sie wirkt auf Strukturen (Tabellen, Spalten, Constraints, Beziehungen), nicht auf die einzelnen Datenzeilen.

  • Zweck: Struktur erstellen, ändern oder löschen; Grundlage für Datenqualität und Datenintegrität
  • Kernbefehle: CREATE, ALTER, DROP, TRUNCATE
  • Beispielpunkte: CREATE TABLE legt Tabellen an; ALTER TABLE erweitert/ändert Spalten; DROP entfernt Objekte unwiderruflich; TRUNCATE leert Tabellen sehr schnell, lässt die Struktur bestehen
  • Hinweise: Transaktions- und Triggerverhalten ist DBMS-abhängig; vor destruktiven Befehlen Backups prüfen

Diese Punkte helfen dir, die Schemaarbeit planbar und sicher durchzuführen.

Data Manipulation Language (DML)

Die DML umfasst Befehle, mit denen du Daten in Tabellen erstellst, liest, aktualisierst und löschst. Sie bildet die Schnittstelle zwischen Anwendungsvorgängen und Datenhaltung.

  • CRUD-Befehle: INSERT (Create), SELECT (Read), UPDATE (Update), DELETE (Delete)
  • Praxisbezug: Benutzeraktionen wie Speichern, Anzeigen, Ändern oder Entfernen werden direkt in diese Befehle übersetzt
  • Sicherheitsaspekt: WHERE ist entscheidend bei UPDATE/DELETE, um unbeabsichtigte Massenänderungen zu vermeiden

Mit DML setzt du die Geschäftslogik auf Datenebene präzise um.

DDL vs. DML – Kerndifferenzen

Beide Sprachbereiche ergänzen sich, verfolgen aber unterschiedliche Ziele. Die Unterscheidung ist prüfungsrelevant.

  • Fokus: DDL = Struktur/Schema; DML = Daten/Zeilen
  • Beispiele: DDL: CREATE, ALTER, DROP, TRUNCATE | DML: INSERT, SELECT, UPDATE, DELETE
  • Transaktionen/Trigger: DDL teils nicht oder anders rückgängig zu machen; DML i. d. R. voll transaktional und löst passende Trigger aus

Merke dir klar die Aufgabenteilung, um Befehle korrekt einzuordnen und Risiken zu steuern.

Prüfungsnahe Kernfragen und Lösungen

Die folgenden Aussagen decken typische Stolpersteine ab:

  1. ALTER TABLE versus UPDATE: ALTER ändert Spaltenstruktur (DDL); UPDATE ändert Zeilenwerte (DML).
  2. TRUNCATE versus DELETE: TRUNCATE leert schnell, strukturnah, ohne WHERE; DELETE ist zeilenbasiert, transaktional, mit Trigger.
  3. DROP versus TRUNCATE: DROP löscht Struktur und Daten vollständig; TRUNCATE löscht nur Daten, Struktur bleibt.
  4. UPDATE/DELETE ohne WHERE: Betrifft alle Zeilen – ein häufiger Fehler; immer gezielt filtern.

Ausblick

Mit DDL und DML beherrschst du die Grundbausteine jeder SQL-basierten Datenbank. In den nächsten Lerneinheiten geht es um fortgeschrittenere Themen wie JOINs, Subqueries und Transaktionssteuerung.