# Data Manipulation Language

Die Data Manipulation Language (DML; deutsch Datenbearbeitungssprache) ist der Teil einer Datenbanksprache, die verwendet wird, um Daten zu schreiben, zu lesen, zu ändern und zu löschen. DML ist die Datenver- oder Datenbearbeitungssprache einer Datenbank und schließt die Formulierung von Abfragen ein.
Für frühere und heutige Systeme sind zum Teil sehr verschiedene Ausprägungen der DML entworfen worden. Beispiele:
Während in den ersten zwanzig Jahren der Datenbanktechnik die DML hauptsächlich zur Programmierung verwendet wurde, wird heute auch Wert auf die direkte Verwendung durch Benutzer gelegt. So kann z. B. die SQL-DML in den meisten Systemen auch interaktiv als Kommandosprache verwendet werden. Auch ist heute in der Regel das Wissen über interne technische Speicherstrukturen nicht mehr notwendig, um entsprechende Verarbeitungsbefehle formulieren zu können. In diesem Fall spricht man von deskriptiven (beschreibenden) Sprachen.

## Sonderstellung der Abfrage

Die Sprachelemente zur Datenabfrage (bei SQL sind das die Schlüsselwörter SELECT, JOIN, WHERE etc.) werden aufgrund ihrer Sonderstellung manchmal einer eigenen Kategorie Data Query Language (DQL, „Datenabfragesprache“), seltener auch Data Retrieval Language (DRL), zugeordnet. Diese Einteilungen sind jedoch unüblich und nicht standardisiert. Die Zuordnung zur Kategorie DML lässt sich damit erklären, dass die Daten bei einer Abfrage selten in ihrer ursprünglichen Form, sondern meist „manipuliert“ (gefiltert, sortiert etc.) ausgeliefert werden.

## SQL

In der praktisch wichtigen Structured Query Language lautet die Syntax wie folgt:
Mit INSERT können explizit konstruierte Tupel oder die Ergebnisse eines SFW-Blocks in eine Relation eingefügt werden. Dabei kann jeweils mehr als eine Zeile verarbeitet werden.
* Ausdruck aus der
UPDATE-Anweisung kann insbesondere auch auf das zu manipulierende Attribut Bezug nehmen wie zum Beispiel in
* Wird bei DELETE die WHERE-Klausel weggelassen, werden alle Tupel gelöscht, aber nicht das Relationsschema.
Die TRUNCATE-Anweisung leert eine Tabelle vollständig und setzt im Unterschied zu DELETE FROM Table auch jegliche Indizes (Die dem Index zugrundeliegende Datenstruktur wird komplett geleert) und Auto-Increment-Werte auf die Standardwerte. Zu beachten ist, dass TRUNCATE bei einigen DBMS, wie zum Beispiel MSSQL, keine Trigger auslöst.
Beispiele:
    Fügt eine Zeile mit den geg. Werten für die Spalten MatrNr und Name in die Tabelle Student hinzu.
    Fügt zwei Zeilen mit den angegebenen Werten für die Spalten MatrNr und Name in die Tabelle Student hinzu.
Beim INSERT-Statement kann die erste Klammer mit den Attribut-Namen auch weggelassen und direkt mit values die Werte eingefügt werden. Allerdings müssen dann die Werte in der gleichen Reihenfolge wie in der Tabellendefinition angegeben werden. Zusätzlich müssen Werte für alle Spalten der Tabelle bereitgestellt werden.
    Lädt alle Studenten aus der Tabelle Student_alt in die Tabelle Student.
    Ändert den Wert der Spalte Name in der Tabelle Student für eine bestimmte MatrNr.
    Löscht alle Zeilen aus der Tabelle Student.
    Löscht die Zeile mit der MatrNr 27124 aus der Tabelle Student.
Leert die Tabelle Student und setzt den eventuell vorhandenen Auto-Increment-Wert auf den definierten Standard (meistens 1).

## Andere Sprachelemente der Datenbank

* Data Definition Language
* Data Control Language
* Transaction Control Language