Ich habe eine SQLite-Tabelle wie folgt aus:Einfügen oder Aktualisieren von SQLite-Tabelle in Abhängigkeit von id
CREATE TABLE test (id int PRIMARY KEY, Name text, Country text, ..., ...)
I-Daten für diese Tabelle immer bin, dass die Spaltenwerte geändert, mit Ausnahme der id
haben. Also, ich möchte einfügen, wenn dort nicht eine bestimmte id
drin ist, aber ich möchte den Datensatz mit dem id
mit den neuen Werten aktualisieren.
Ich habe dies versucht:
INSERT OR IGNORE INTO test (id, Name, ..., ...) VALUES (?,?, ....)"
Dies keine doppelten id's
schafft - und das ist gut - aber der Rest des Datensatz nicht aktualisiert, wenn entweder die id
existiert bereits in der Tabelle.
Ich möchte vermeiden, SELECT
für diese id
verwenden und überprüfen, ob es da ist, dann aktualisieren oder entsprechend einfügen.
Ja, ich möchte 'SELECT' vermeiden und dann' INSERT' oder 'UPDATE' auf die je Ergebnis des 'SELECT'. @CL schlägt eine Lösung vor, die ich auch anderswo gesehen habe: eine Zeile mit dieser spezifischen 'id' zu aktualisieren, die funktioniert, wenn die 'id' da ist, und wenn keine Aktualisierung gemacht wurde, bedeutet das, dass ich 'INSERT' machen muss . Aber es ist immer noch eine Zwei-Abfrage-Lösung. Ich weiß nicht, was schneller ist, aber – chiapa
Ich denke, "INSERT OR REPLACE" ist die einzige One-Step-Lösung. Darf ich fragen, warum Sie so eine Abneigung gegen 2 Operationen haben? Lassen Sie mich noch einmal sagen, dass Sie in sqlite als eingebettete Lösung nicht die Kosten bezahlen müssen, die Sie mit herkömmlichen Client-Server-RDBMS bezahlen würden, da es keinen Rundlauf durch den Netzwerkstapel, keine Kontextwechsel usw. gibt – redneb
Keine Aversion, wollte nur unnötige Operationen und Overhead vermeiden. In T-SQL würde ich zwei Operationen vermeiden, wenn ich eine verwenden könnte, da die Leistung beeinträchtigt wäre – chiapa