Beispieltabelle „Kontakte“
ID | Name | Nachname | |
05 | Viktor | Mustermann | viktor-mustermann@musterdmain.de |
06 | Mia | Muster | miamuster@musterdmain.de |
06 | Sina | Muster | sinamuster@musterdmain.de |
Allgemeiner Aufruf von MySQL Update
UPDATE Tabelle SET SpalteA = x WHERE SpalteB = Y
MySQL Update example
Simples Beispiel eines MySQL Update
UPDATE Kontakte SET Nachname = 'Dite' WHERE ID = 05
Ändere die Tabelle Kontakte und setze den Wert von Nachname = ‚Dite‘ wenn ID = 05 ist.
danach sieht die Tabelle wie folgt aus:
ID | Name | Nachname | |
05 | Viktor | Dite | viktor-mustermann@musterdmain.de |
06 | Mia | Muster | miamuster@musterdmain.de |
06 | Sina | Muster | sinamuster@musterdmain.de |
MySQL Update values – mehrere Spalten zugleich ändern
UPDATE Kontakte SET Nachname = 'Dite', Email = 'viktor-dite@musterdomain.de' WHERE ID = 05
danach sieht die Tabelle wie folgt aus:
ID | Name | Nachname | |
05 | Viktor | Dite | viktor-dite@musterdomain.de |
06 | Mia | Muster | miamuster@musterdmain.de |
06 | Sina | Muster | sinamuster@musterdmain.de |
Suchen und Ersetzen mit MySQL Update
UPDATE Kontaktes SET Email = REPLACE(Email, '@musterdmain.de', '@musterdomain.de');
danach sieht die Tabelle wie folgt aus:
ID | Name | Nachname | |
05 | Viktor | Dite | viktor-dite@musterdomain.de |
06 | Mia | Muster | miamuster@musterdomain.de |
06 | Sina | Muster | sinamuster@musterdomain.de |
Suchen und Ersetzen am Beispiel von WordPress Beiträgen
UPDATE wp_posts SET post_content = REPLACE(post_content, 'src="http://', 'src="https://');
Damit ersetzt man alle Bilder URLs aller WordPress Beiträge durch einen https Aufruf
MySQL Update mit Inner Join Statement
Wenn ein MySQL Tabelleneintrag verändert werden soll, dessen Ergebnis nur durch das hinzuziehen von einem anderen Tabelleneintrag selektierbar ist, wird ein Join für das Update dieser MySQL Tabelle notwendig.
MySQL hat hier als einzige SQL Datenbank eine andere Syntax.
Deswegen hier eine Gedankenstütze an mich:
MySQL Update mit Join
UPDATE TableA AS a INNER JOIN TableB AS b ON a.id=b.id SET a.rowX = 1 WHERE b.rowY = 64 AND a.rowZ=1
MySQL UPDATE mit SELECT IN
Ich wollte für ein UPDATE mit Hilfe eines SELECTs die passenden Daten herausholen. Da es sich um mehrere Datenzeilen handelt (mehrere Ergebnisse) käme ich hier auch an einem IN nicht vorbei.
Hier also die erste nicht funktionierende Variante, die mir so logisch in den Kopf gekommen ist:
UPDATE WHERE IN SELECT
UPDATE products p1 SET p1.products_weight = 250.00 WHERE p1.products_id IN ( SELECT p.products_id FROM products p2 JOIN products_to_categories p2c ON p2.products_id=p2c.products_id WHERE p2c.categories_id=1 )
MySQL quittiert diese Query mit einer Fehlermeldung
#1093 – You can’t specify target table ‚p1‘ for update in FROM clause
Soll heißen, dass Du kein Update auf einer Tabelle ausführen kannst, aus der Du die daten für das Update heranziehst. Doch warum funktioniert das nicht? Klingt doch nach einer logischen Struktur? Eigentlich gibt es nur eine ganz simple Antwort: mögliche Unendlichschleife!
Im Updateprozess können Werte verändert werden, die dann wieder von der From Klausel als Eingabe in Frage kämen. So würde das Update u.U. nie fertig werden.
Für so ein Update ist es jedoch gar nicht notwendig, ein so komplexes UPDATE WHERE IN SELECT auszuführen. UPDATE kann selbst mit JOINs umgehen und kann genau wie im SELECT auch die passenden Einträge selber sich zusammensuchen!
UPDATE ohne SELECT definieren
UPDATE products p JOIN products_to_categories p2c ON p.products_id=p2c.products_id SET p.products_weight = 250.00 WHERE p2c.categories_id=1
Das UPDATE kann nun natürlich noch mit komplexeren JOINs verfeinert werden. Die genaue Syntax von UPDATE gibt es hier
Was sagst Du zu dieser Lösung?
Hat Sie Dir geholfen? Hat Sie Dein Problem gelöst? Wenn ja, würd ich mich über ein Rückmeldung freuen, wenn nein, dann schreib doch mal, woran es noch hapert. Wir finden schon eine Lösung!
Letzte Änderung: