Quasi-MySQL-Dump für einzelne Spalten

21. Mai 2009 um 17:04 Uhr von Wolfgang Stengel zu MySQL
Um Daten aus einzelnen Spalten von einer MySQL-Tabelle in eine Andere zu kopieren (z.B. vom Entwicklungsserver zum Produktionsserver) gibt es einen einfachen Trick: Über die CONCAT-Funktion UPDATE-Statements erzeugen.

In diesem Beispiel möchte ich die Informationen in der Spalte primecost der Tabelle articles extrahieren und auf einem andern Server einspielen:
SELECT CONCAT("UPDATE articles SET primecost='",primecost,"' WHERE sku='",sku,"';") FROM articles INTO OUTFILE "primecost.sql";
In der Datei primecost.sql schlagen dann eine ganze Reihe von UPDATEs auf:
UPDATE articles SET primecost='39.49' WHERE sku='C23125123';
UPDATE articles SET primecost='12.99' WHERE sku='M23108241';
UPDATE articles SET primecost='14.99' WHERE sku='F23987912';
...
Diese kann ich dann auf dem Produktionsserver bequem an der Linux-Konsole einspielen:
mysql -uwolfgang -ppasswort datenbankname < primecost.sql
Da ich den Inhalt der Felder primecost und sku genau kenne ist hier Injection ausnahmsweise kein Thema. Je nach Feldinhalt kann man auch mit REPLACE kritische Zeichen escapen.
PHP Wolfgang Stengel