====== LU06c - SQL-DML: Daten ändern (UPDATE) ======
===== Lernziele =====
* Ich kann mit UPDATE einzelne oder mehrere Spalten eines Datensatzes ändern.
* Ich kann erklären, was passiert, wenn ich UPDATE ohne WHERE ausführe.
* Ich kann vor einem UPDATE einen Dry-Run mit SELECT durchführen.
===== UPDATE Statement =====
Der Befehl UPDATE ändert bestehende Daten in einer Tabelle.
UPDATE tabellenname
SET spalte1 = neuer_wert1, spalte2 = neuer_wert2
WHERE bedingung;
**Ohne WHERE wird jede Zeile geändert.**
UPDATE tabellenname
SET spalte1 = neuer_wert1;
Dieser Code würde **alle** Datensätze der Tabelle mit dem neuen Wert updaten – meistens nicht das, was Sie wollen.
===== Der Dry-Run: Better Safe than Sorry =====
Bevor Sie ein UPDATE ausführen, sollten Sie **immer** zuerst prüfen, welche Zeilen betroffen wären. Einfach zunächst als SELECT mit derselben WHERE-Bedingung, welche nachher beim UPDATE verwendet würde:
-- 1. Erst prüfen: welche Zeilen sind betroffen?
SELECT * FROM favourite_film WHERE film_id = 2;
-- 2. Passt das Ergebnis? Dann erst ändern.
UPDATE favourite_film
SET director = 'C. Nolan'
WHERE film_id = 2;
Zeigt Ihnen der SELECT-Dry-Run mehr Zeilen, als Sie erwartet haben, stimmt Ihre WHERE-Bedingung noch nicht. Erst wenn das SELECT-Ergebnis passt, führen Sie dasselbe WHERE mit UPDATE aus.
{{url>https://player.mux.com/u68tF7ttsyWNr8fs02I5V02nRpvUKMjDPLj5fca00frInI?metadata-video-title=UPDATE+SET&video-title=UPDATE+SET 1200,675 noscroll noborder center|Screencast: UPDATE ohne WHERE}}
//Zellen updaten und was passiert ohne WHERE.//
===== Beispiele =====
**Ausgangstabelle:**
^ film_id ^ title ^ director ^ released_year ^ star1 ^
| 1 | Lost in Translation | Sofia Coppola | 2003 | Scarlett Johansson |
| 2 | Inception | Christopher Nolan | 2010 | Leonardo DiCaprio |
| 3 | Arrival | Denis Villeneuve | 2016 | Amy Adams |
==== Beispiel 1: Gezieltes Update über den Primärschlüssel ====
SELECT * FROM favourite_film WHERE film_id = 2;
UPDATE favourite_film
SET director = 'C. Nolan'
WHERE film_id = 2;
^ film_id ^ title ^ director ^ released_year ^ star1 ^
| 1 | Lost in Translation | Sofia Coppola | 2003 | Scarlett Johansson |
| 2 | Inception | **C. Nolan** | 2010 | Leonardo DiCaprio |
| 3 | Arrival | Denis Villeneuve | 2016 | Amy Adams |
==== Beispiel 2: Mehrere Spalten gleichzeitig ändern ====
UPDATE favourite_film
SET title = 'Arrival (Extended Cut)', star1 = 'Amy Adams'
WHERE film_id = 3;
^ film_id ^ title ^ director ^ released_year ^ star1 ^
| 1 | Lost in Translation | Sofia Coppola | 2003 | Scarlett Johansson |
| 2 | Inception | C. Nolan | 2010 | Leonardo DiCaprio |
| 3 | **Arrival (Extended Cut)** | Denis Villeneuve | 2016 | **Amy Adams** |
Mit einem einzigen SET können Sie beliebig viele Spalten auf einmal ändern – einfach mit Komma getrennt.
----
{{tag>M290-LU06}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Guido Koch