Suchen und ersetzen in MySQL Datenbanken
Wenn man mit Datenbanken arbeitet, dann vermisst man oft Funktionen, die man aus der Arbeit mit anderen Programmen kennt. Eine dieser Funktionen ist „suchen und ersetzen“. Ich zeige euch wie ihr ganz einfach über ein SQL Statement auf einer MySQL Datenbank nach Zeichenketten suchen könnt und diese direkt ersetzt. Weitere hilfreiche Tipps zu MySQL findet man im Buch MySQL – kurz & gut.
Suchen und ersetzen
Diese Funktion kennt so gut wie jeder der mit einem Computer arbeitet. In Office Programmen kann man damit auf einfache Art und Weise sehr schnell Änderungen durchführen. Auch als Programmierer braucht man diese Funktion sehr oft. Sei es eine schnelle Code Änderung oder beim Vorbereiten eines Datenimports in die Datenbank. Gerade bei großen Datenmengen beziehungsweise bei einer großen Anzahl an Zeilen ist diese Funktion einfach nicht wegzudenken.
Datenbank
Datenbanksysteme sind bekannt dafür, dass man sehr schnell Daten wieder auffinden kann. Jeder der mit Datenbanken arbeitet kenn die Suchfunktion und jeder Programmierer hat zumindest schon das Select SQL Statement gesehen und auch verwendet. Was ist aber mit dem ersetzen? Dafür gibt es in SQL eigentlich nicht wirklich eine Standardfunktion. Das hat den Grund, dass Datenbanken Datenspeicher sind und weniger dafür gedacht sind diese auch zu verändern. Diese Funktion wird üblicherweise von Applikationen bereitgestellt.
Strings ersetzen
Nach ein wenig Recherche habe ich schließlich folgendes Statement gefunden:
UPDATE tabelle SET spalte = REPLACE(spalte, 'alter Wert', 'neuer Wert');
Wie funktioniert das? Es wird ein einfaches Update Statement abgesetzt, welches einen Wert neu setzt. Soweit ist alles Standard. Als neuen Wert setzen wir aber das Ergebnis einer Funktion mit Namen Replace. Diese Funktion benötigt drei Parameter. Die zu verwendete Tabellenspalte, den alten Wert als String und den neuen Wert.
Anwendungsbeispiel
Eine Datenbank enthält Links die leider durch eine Änderung der Domain ungültig werden. Um sie weiterhin zu verwenden müssen bei allen Links die Domains ausgetauscht werden. Das geht so:
UPDATE links SET href = REPLACE(href, 'http://altedomain.com', 'http://neuedomain.com');
Alternativ kann man über ein WHERE die Zeilen die von dem Suchen und Ersetzen betroffen sind noch etwas einschränken.