# DDL und DML: SQL-Befehle im Überblick

> SQL-Befehle werden in Gruppen eingeteilt. DDL (Data Definition Language) verändert die Struktur der Datenbank – CREATE, ALTER, DROP für Tabellen. DML (Data Manipulation Language) verändert die Daten in den Tabellen – INSERT, UPDATE, DELETE und das lesende SELECT. Wer die Einteilung kennt, versteht sofort, ob ein Befehl das Schema oder die Inhalte betrifft.

**Autor:** Mr. Benjamin · **Beruf:** IT-Grundlagen
**Veröffentlicht:** 2026-09-21 · **Aktualisiert:** 2026-10-28
**Quelle:** https://yellowbluetech.de/blog/ddl-dml-sql

---

`CREATE TABLE`, `INSERT`, `DROP` – SQL wirkt am Anfang wie ein bunter Haufen Befehle. Dahinter steckt aber eine klare Ordnung: Manche Befehle bauen die **Struktur** der Datenbank, andere arbeiten mit den **Daten** darin. Diese Unterscheidung ist der Schlüssel.

## Die zwei wichtigsten Sprachfamilien

> **Merksatz**
>
> **DDL** = *Data Definition Language* → verändert die **Struktur** (Tabellen, Spalten).
> **DML** = *Data Manipulation Language* → verändert die **Daten** (Zeilen in Tabellen).
>
> Eselsbrücke: **D**efinition = Bauplan, **M**anipulation = Inhalt.

## DDL – die Struktur

DDL-Befehle legen an, ändern und löschen **Datenbankobjekte** wie Tabellen:

```sql
CREATE TABLE azubis (
  id INT PRIMARY KEY,
  name VARCHAR(80),
  lehrjahr INT
);

ALTER TABLE azubis ADD beruf VARCHAR(10);

DROP TABLE azubis;
```

| Befehl | Wirkung |
| --- | --- |
| `CREATE` | Objekt (z. B. Tabelle) anlegen |
| `ALTER` | Struktur ändern (Spalte hinzufügen/ändern) |
| `DROP` | Objekt komplett löschen |
| `TRUNCATE` | alle Zeilen einer Tabelle leeren (Struktur bleibt) |

## DML – die Daten

DML-Befehle arbeiten mit den **Zeilen** in einer bestehenden Tabelle:

```sql
INSERT INTO azubis (id, name, lehrjahr) VALUES (1, 'Aylin', 2);
UPDATE azubis SET lehrjahr = 3 WHERE id = 1;
DELETE FROM azubis WHERE id = 1;
```

Auch das lesende [`SELECT`](/blog/sql-grundlagen-select) zählt zur DML (manchmal als eigene „DQL" geführt).

> **Prüfungstipp**
>
> Zwei Stolperfallen: Erstens der Unterschied **DELETE vs. TRUNCATE vs. DROP** – `DELETE` löscht (gefiltert) einzelne Zeilen (DML), `TRUNCATE` leert die ganze Tabelle schnell (DDL), `DROP` wirft die **Tabelle selbst** weg. Zweitens: **`UPDATE`/`DELETE` ohne `WHERE`** betrifft **alle** Zeilen – ein Klassiker für Datenverlust. In Prüfungen wird oft gefragt, welcher Befehl zu welcher Gruppe gehört.

## Alle SQL-Sprachfamilien im Überblick

| Gruppe | Name | Aufgabe | Typische Befehle |
| --- | --- | --- | --- |
| **DDL** | Data Definition Language | Struktur anlegen, ändern, löschen | `CREATE`, `ALTER`, `DROP`, `TRUNCATE` |
| **DML** | Data Manipulation Language | Daten einfügen, ändern, löschen | `INSERT`, `UPDATE`, `DELETE` |
| **DQL** | Data Query Language | Daten abfragen | `SELECT` |
| **DCL** | Data Control Language | Zugriffsrechte vergeben | `GRANT`, `REVOKE` |
| **TCL** | Transaction Control Language | [Transaktionen](/blog/transaktionen-acid) steuern | `COMMIT`, `ROLLBACK` |

Die Einteilung ist nicht in jedem Lehrbuch gleich: Manche ordnen `SELECT` der DML zu, andere führen es als eigene Gruppe DQL. Auch `TRUNCATE` wird je nach Quelle der DDL oder der DML zugerechnet. Wichtig ist, dass du die Grundidee kennst: **Struktur** (DDL) gegen **Daten** (DML).

## Warum die Einteilung nützt

> **Hinweis**
>
> Die Einteilung sagt dir sofort, wie „gefährlich" und wie „endgültig" ein Befehl ist. DDL-Befehle wie `DROP` oder `TRUNCATE` greifen tief in die Struktur ein und lassen sich oft nicht einfach zurücknehmen – anders als DML-Änderungen, die innerhalb einer [Transaktion](/blog/transaktionen-acid) rückgängig gemacht werden können. Neben DDL und DML gibt es noch **DCL** (Rechte: `GRANT`, `REVOKE`) und **TCL** (Transaktionssteuerung: `COMMIT`, `ROLLBACK`) – für den Einstieg sind aber DDL und DML die zwei, die du sicher unterscheiden können musst.

## Selbstkontrolle

**Frage:** Zu welcher SQL-Sprachfamilie gehört der Befehl INSERT?

- [ ] DDL – es verändert die Struktur
- [x] DML – es verändert die Daten
- [ ] DCL – es vergibt Rechte
- [ ] Es ist gar kein SQL-Befehl

**Erklärung:** INSERT fügt Datenzeilen in eine bestehende Tabelle ein und gehört damit zur DML (Data Manipulation Language). Die Struktur der Tabelle verändert es nicht – das wäre Aufgabe von DDL-Befehlen wie CREATE oder ALTER.

## Häufige Fragen

### Was ist der Unterschied zwischen DELETE und TRUNCATE?

DELETE ist ein DML-Befehl und löscht Zeilen, die einer Bedingung entsprechen; ohne WHERE alle. TRUNCATE ist ein DDL-Befehl und leert die gesamte Tabelle in einem Rutsch, meist schneller und ohne einzelne Zeilenprotokollierung. Die Tabellenstruktur bleibt in beiden Fällen erhalten – gelöscht wird nur der Inhalt.

### Warum ist DROP so gefährlich?

DROP entfernt das Objekt selbst, bei DROP TABLE also die komplette Tabelle mitsamt Struktur und Daten. Das lässt sich in der Regel nicht per ROLLBACK rückgängig machen. Deshalb setzt man DROP nur bewusst und mit Vorsicht ein, idealerweise nach einer Sicherung.

### Gehört SELECT zu DML?

Häufig ja – SELECT liest Daten und wird oft der DML zugeordnet. Manche Lehrbücher führen es als eigene Kategorie DQL (Data Query Language), weil es Daten nur abfragt und nicht verändert. Für die Praxis ist entscheidend: SELECT ändert nie etwas, es liest ausschließlich.

### Welche DML-Befehle gibt es?

Die klassischen DML-Befehle sind INSERT zum Einfügen, UPDATE zum Ändern und DELETE zum Löschen von Datenzeilen. Häufig wird auch SELECT zur DML gezählt, andere Quellen führen es getrennt als DQL.

### Was sind DCL und TCL?

DCL (Data Control Language) regelt Zugriffsrechte mit GRANT und REVOKE. TCL (Transaction Control Language) steuert Transaktionen mit COMMIT und ROLLBACK. Beide sind für Fortgeschrittene relevant; für die Grundlagen genügt die sichere Unterscheidung von DDL und DML.

**Weiterlesen:** [Normalisierung: Datenbanken ohne Redundanz](/blog/normalisierung) · [ER-Modell erklärt: Entity-Relationship-Modell](/blog/er-modell-datenbanken-planen) · [SQL-JOINs erklärt: INNER JOIN und LEFT JOIN](/blog/sql-joins)

## Das Wichtigste in Kürze

- **DDL** verändert die **Struktur**: `CREATE`, `ALTER`, `DROP`, `TRUNCATE`.
- **DML** verändert die **Daten**: `INSERT`, `UPDATE`, `DELETE` (und lesend `SELECT`).
- **DELETE** (Zeilen) ≠ **TRUNCATE** (ganze Tabelle) ≠ **DROP** (Tabelle selbst).
- `UPDATE`/`DELETE` **ohne WHERE** trifft **alle** Zeilen – Vorsicht.
- Ergänzend: **DCL** (Rechte) und **TCL** (Transaktionen).
