====== 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