Ich habe 2 SQLite-Datenbanken mit gemeinsamen Daten, aber unterschiedlichen Zwecken, und ich wollte vermeiden, Daten erneut einzufügen. Ich habe mich gefragt, ob es möglich ist, eine ganze Tabelle von einer Datenbank in eine andere zu kopieren.
141
Stellen Sie sich ein Beispiel vor, in dem ich zwei Datenbanken habe, nämlich allmsa.db und atlanta.db. Angenommen, die Datenbank allmsa.db enthält Tabellen für alle msas in den USA und die Datenbank atlanta.db ist leer.
Unser Ziel ist es, die Tabelle atlanta von allmsa.db nach atlanta.db zu kopieren.
Schritte
ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM;
, dass wir den gesamten Pfad der anzuhängenden Datenbank angeben.sqlite> .databases
Sie die Ausgabe als sehenINSERT INTO atlanta SELECT * FROM AM.atlanta;
Dies sollte Ihren Zweck erfüllen.
quelle
Einfachster und korrekter Weg in einer einzigen Zeile:
Der Primärschlüssel und die Spaltentypen bleiben erhalten.
quelle
.dump
erstellt den BefehlCREATE TABLE IF NOT EXISTS ...
und es tritt kein Fehler auf, obwohl meine Zieltabelle vorhanden ist.Für eine einmalige Aktion können Sie .dump und .read verwenden.
Speichern Sie die Tabelle my_table aus old_db.sqlite
Lesen Sie den Speicherauszug in die Datei new_db.sqlite, sofern die dortige Tabelle nicht vorhanden ist
Jetzt haben Sie Ihren Tisch geklont. Um dies für die gesamte Datenbank zu tun, lassen Sie einfach den Tabellennamen im Befehl .dump weg.
Bonus: Die Datenbanken können unterschiedliche Codierungen haben.
quelle
Objective-C-Code zum Kopieren von Tabellen aus einer Datenbank in eine andere Datenbank
quelle
Ich musste Daten aus einer SQL Server Compact-Datenbank nach SQLite verschieben. Mit SQL Server 2008 können Sie also mit der rechten Maustaste auf die Tabelle klicken und "Skripttabelle an" und dann "Daten in Einfügungen" auswählen. Kopieren Sie die Einfügeanweisungen, entfernen Sie die 'GO'-Anweisungen und sie wurden erfolgreich ausgeführt, wenn sie mit der App' DB Browser for Sqlite 'auf die SQLite-Datenbank angewendet wurden.
quelle
Erstes Szenario: DB1.sqlite und DB2.sqlite haben dieselbe Tabelle (t1), aber DB1 ist "aktueller" als DB2. Wenn es klein ist, löschen Sie die Tabelle aus DB2 und erstellen Sie sie mit den Daten neu:
Zweites Szenario: Wenn es sich um eine große Tabelle handelt, ist eine Typlösung möglicherweise besser
INSERT if not exists
geeignet. Wenn Sie eineUnique Key
Spalte haben, ist dies einfacher, andernfalls müssen Sie eine Kombination von Feldern (möglicherweise jedes Feld) verwenden, und irgendwann ist es immer noch schneller, die Tabelle zu erstellendrop
und neu zu erstellencreate
. Es ist immer einfacher (weniger Nachdenken erforderlich).DAS SETUP: Öffnen Sie SQLite ohne eine Datenbank, die eine
temporary
In-Memory-main
Datenbank erstellt, dannattach
DB1.sqlite und DB2.sqliteund verwenden Sie
.databases
, um die angehängten Datenbanken und ihre Dateien anzuzeigen.quelle
UNIQUE
undPRIMARY KEY
Attribute, also wenn Sie die haben, werden Sie entweder müssenDROP TABLE
und manuellCREATE
undINSERT
oder die Verwendung.dump
und.read
oben genannten Verfahren von @Thinkeye.