MySQL Update Beispiele in der Praxis

Beispieltabelle „Kontakte“

ID Name Nachname Email
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 Email
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 Email
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 Email
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
mysql update select in

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!

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.


2 Kommentare » Schreibe einen Kommentar

  1. Vielen Dank. Hat mir gerade eine Menge Arbeit erspart.