Longblob-Feld kopieren
Frank82
- datenbank
Hallo,
ich habe eine Kopierroutine meiner DB-Felder geschrieben.
Einziges Problem ist das longblob Feld.
Hier will das nicht funktionieren...
Kann es sein, dass das Feld einfach zu "voll"/groß ist?
Ich möchte einfach eine Zeile in einer Tabelle kopieren und beispielsweise aus...
ID = 1
Name = Peter
Bild = [4,3kb]
ID = 2
Name = Peter2
Bild = [4,3kb]
... machen.
Ist momentan so gelöst, dass die Felder einzeln selektiert werden und der Insert dementsprechend zusammengebaut wird.
Weiß da jemand Abhilfe?
Danke,
Frank.
Moin!
ich habe eine Kopierroutine meiner DB-Felder geschrieben.
Vermutlich suboptimal.
Einziges Problem ist das longblob Feld.
Wo immer BLOB-Felder auftauchen, sollte man sich fragen, ob nicht das Dateisystem die bessere Alternative wäre. Datenbanken sind nicht wirklich dazu gebaut worden, binäre Daten effektiv zu verwalten.
Ich möchte einfach eine Zeile in einer Tabelle kopieren und beispielsweise aus...
INSERT kennt auch eine Variante mit SELECT, so dass keinerlei Daten an die den Query sendende Applikation gehen müssen.
Ist momentan so gelöst, dass die Felder einzeln selektiert werden und der Insert dementsprechend zusammengebaut wird.
Schlechte Variante. Funktioniert bei kleinen Datenmengen noch, wird aber irgendwann am Speicherplatz scheitern, den das Skript nutzen darf. Lass das Kopieren direkt die Datenbank machen.
- Sven Rautenberg
Vielen Dank für die Antwort.
Dass Binäre-Dateien in einem Longblob-Feld nicht von Vorteil sind ist mir inzwischen bekannt; lässt sich in diesem Fall aber leider nicht mehr ändern.
Ich habe nun mittels SELECT im INSERT-Befehl versucht die Zeile zu kopieren.
Allerdings erhalte ich die Fehlermeldung :
#1093 - You can't specify target table 'xxxxxxxxx' for update in FROM clause
Was ja auch klar ist.
Ich wüsste jetzt nur noch die Möglichkeit eine temporären Table zu Erstellen oder wie geht das sonst?
Danke im Voraus.
Moin!
#1093 - You can't specify target table 'xxxxxxxxx' for update in FROM clause
Was ja auch klar ist.
Ich wüsste jetzt nur noch die Möglichkeit eine temporären Table zu Erstellen oder wie geht das sonst?
Ja, so ist es. Temporäre Tabellen werden vom DBMS intern basierend auf der DB-Connection verwaltet und optimiert. Du verbrauchst im Idealfall also nur ein wenig RAM zum Zwischenspeichern für diesen Vorgang, welcher aber komplett von der Datenbank verwaltet wird.
- Sven Rautenberg