SQL-Befehl: mit „UPDATE“ Daten flexibel und präzise ändern

Der SQL-Befehl UPDATE gehört zu den zentralen Werkzeugen, um bestehende Daten in einer Datenbank zu ändern. Mit ihm kannst du einzelne oder mehrere Felder flexibel anpassen, basierend auf bestimmten Bedingungen. In diesem Artikel erfährst du, wie der UPDATE-Befehl nach dem SQL-Standard funktioniert, wie er auf verschiedenen Plattformen wie MariaDB, MySQL, MSSQL, SQLite und Oracle angewendet wird, und worauf du dabei achten solltest.


Was ist der UPDATE-Befehl?

Der UPDATE-Befehl wird verwendet, um Daten in bestehenden Tabellen zu ändern. Dabei kannst du bestimmte Zeilen auswählen, deren Werte du ändern möchtest, und gezielt Spalten mit neuen Werten belegen. Er besteht aus zwei Hauptteilen:

  1. Welche Tabelle? → Mit dem UPDATE-Befehl spezifizierst du die Tabelle, in der du Änderungen vornehmen willst.
  2. Was ändern? → Mit SET definierst du, welche Spalte(n) aktualisiert und welche Werte diesen Spalten zugewiesen werden sollen. Eine WHERE-Bedingung grenzt diese Änderungen ein.

Syntax nach dem SQL-Standard:


UPDATE tabellenname
SET spalte1 = wert1, spalte2 = wert2, ...
WHERE bedingung;

Die „Personen“-Tabelle als Beispiel

Für unsere Beispiele nutzen wir die Tabelle „Personen“ aus der Datenbank „Datenbank“, die unter anderem historische Persönlichkeiten enthält. Sie hat folgende Struktur:

IDVornameNachnameGeburtsdatumGeschlechtKörpergröße_cmGeburtsortLetzter_WohnortBeschreibung
1AlbertEinstein1879-03-141172UlmPrincetonRevolutionierte die Physik mit der Relativitätstheorie.
2MarieCurie1867-11-070160WarschauParisNobelpreisträgerin in zwei Wissenschaftsbereichen.
3MahatmaGandhi1869-10-021165PorbandarNeu-DelhiFührte Indien gewaltlos zur Unabhängigkeit.

Anwendungsbeispiele für den UPDATE-Befehl

1. Einen einzelnen Wert ändern

Angenommen, du möchtest den Nachnamen von „Marie Curie“ durch ihren vollständigen „Curie-Skłodowska“ ersetzen. Das entsprechende SQL-Kommando lautet:


UPDATE Personen
SET Nachname = 'Curie-Skłodowska'
WHERE Vorname = 'Marie' AND Nachname = 'Curie';

Das Ergebnis: | ID | Vorname | Nachname | Geburtsdatum | Geschlecht | Körpergröße_cm | Geburtsort | Letzter_Wohnort | Beschreibung | |—–|———–|—————-|————–|————|—————-|————|—————–|——————————————| | 2 | Marie | Curie-Skłodowska | 1867-11-07 | 0 | 160 | Warschau | Paris | Nobelpreisträgerin in zwei Bereichen. |


2. Mehrere Spalten gleichzeitig ändern

Gehen wir davon aus, dass der Eintrag von „Albert Einstein“ unrichtig ist, weil er zuletzt in Berlin lebte und nicht in Princeton. Gleichzeitig möchtest du seine Beschreibung korrigieren:


UPDATE Personen
SET Letzter_Wohnort = 'Berlin', Beschreibung = 'Wirkte zuletzt in Berlin.'
WHERE Vorname = 'Albert' AND Nachname = 'Einstein';

Das Ergebnis: | ID | Vorname | Nachname | Letzter_Wohnort | Beschreibung | |—–|———–|———–|—————–|———————————| | 1 | Albert | Einstein | Berlin | Wirkte zuletzt in Berlin. |


3. Alle Zeilen ändern

Stell dir vor, das Feld „Geburtsort“ wurde fälschlicherweise mit Städtenamen auf Deutsch belegt. Du möchtest alle Einträge ändern, damit bei allen Personen stattdessen „Unbekannt“ angezeigt wird:


UPDATE Personen
SET Geburtsort = 'Unbekannt';

Danach sehen alle Einträge in der Spalte „Geburtsort“ gleich aus: | ID | Vorname | Nachname | Geburtsort | |—–|———–|————|————–| | 1 | Albert | Einstein | Unbekannt | | 2 | Marie | Curie | Unbekannt |

4. Selektive Änderungen mit Bedingungen

Nehmen wir an, alle Personen unter 170 cm Körpergröße sollen in ihrer Beschreibung den Zusatz „Kleinwüchsig“ erhalten. Dies kannst du über eine Bedingung steuern:


UPDATE Personen
SET Beschreibung = CONCAT(Beschreibung, ' Kleinwüchsig.')
WHERE Körpergröße_cm < 170;

Wichtige Hinweise beim Arbeiten mit UPDATE

1. Der Schutz durch die WHERE-Klausel

Wenn du die WHERE-Bedingung in deinem Befehl vergisst, werden die Daten in allen Zeilen der Tabelle aktualisiert. Stelle sicher, dass deine Bedingung konkret genug ist, wenn du nur bestimmte Zeilen ändern möchtest. Beispiel:


UPDATE Personen
SET Beschreibung = 'Unverändert'; -- Sichere Anweisung
WHERE ID = 99; -- Schutz durch konkrete ID!

Unterstützung durch Datenbankplattformen

Während der UPDATE-Befehl im Kern Teil des SQL-Standards ist, bieten die verschiedenen Plattformen oft zusätzliche Funktionen oder leichte Variationen. Schauen wir uns die Hauptplattformen an:

MariaDB und MySQL

MariaDB und MySQL unterstützen den Standard vollständig und fügen erweiterte Möglichkeiten wie die Verwendung von Joins in UPDATE-Abfragen hinzu. Beispiel (zwei Tabellen verknüpfen bei UPDATE):


UPDATE Personen AS p
INNER JOIN Adresse a ON p.ID = a.PersonenID
SET p.Letzter_Wohnort = a.Stadt;

MSSQL

MSSQL (Microsoft SQL Server) bietet ebenfalls den Standard auf. Zusätzlich kannst du mit OUTPUT die aktualisierten Datensätze anzeigen lassen:


UPDATE Personen
SET Nachname = 'Beispiel'
OUTPUT INSERTED.* -- zeigt die geänderten Zeilen an
WHERE ID = 1;

Oracle Database

Oracle unterstützt den UPDATE-Befehl mit der Möglichkeit, geänderte Daten über RETURNING INTO direkt im Code weiterzuverwenden:


UPDATE Personen
SET Beschreibung = 'Neu'
WHERE ID = 1
RETURNING Beschreibung INTO :neuBeschreibung;

SQLite

SQLite implementiert den Standard ohne größere Erweiterungen. Das Ändern oder Hinzufügen von Spalten während eines Updates ist in SQLite eingeschränkt, sodass ein gesetzter Standardwert einfacher ist:


UPDATE Personen
SET Geburtsort = 'Unbekannt';

Zusammenfassung der Plattformkompatibilität

PlattformStandard unterstützt?Ergänzungen
MariaDBJaUnterstützt Joins und Transaktionen mit UPDATE
MSSQLJaOUTPUT-Ausgabe mit geänderten Zeilen
MySQLJaUnterstützt erweiterte Joins in UPDATE-Abfragen
OracleJaRETURNING INTO zum Zurücksenden von Ergebnissen
SQLiteJaEinfachere Nutzung ohne Sonderfunktionen

Fazit

Der UPDATE-Befehl ist ein unverzichtbares Werkzeug, um bestehende Daten in SQL-Datenbanken zu ändern. Egal ob du Fehler korrigierst, Spalten aktualisierst oder ganze Zeilen neu setzt: Mit den oben genannten Beispielen kannst du den UPDATE-Befehl sicher und effizient verwenden.