Mam 2 bazy danych SQLite ze wspólnymi danymi, ale o różnych celach i chciałem uniknąć ponownego wprowadzania danych, więc zastanawiałem się, czy można skopiować całą tabelę z jednej bazy danych do drugiej?
141
Będziesz musiał dołączyć bazę danych X do bazy danych Y za pomocą polecenia ATTACH , a następnie uruchomić odpowiednie polecenia Wstaw do tabel, które chcesz przenieść.
INSERT INTO X.TABLE SELECT * FROM Y.TABLE;
Lub, jeśli kolumny nie są dopasowane w kolejności:
INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE;
Rozważmy przykład, w którym mam dwie bazy danych, a mianowicie allmsa.db i atlanta.db. Powiedzmy, że baza danych allmsa.db zawiera tabele dla wszystkich msas w USA, a baza danych atlanta.db jest pusta.
Naszym celem jest skopiowanie tabeli atlanta z pliku allmsa.db do atlanta.db.
Kroki
ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM;
zwróć uwagę, że podajemy całą ścieżkę do bazy danych do dołączenia.sqlite> .databases
możesz zobaczyć dane wyjściowe jakoINSERT INTO atlanta SELECT * FROM AM.atlanta;
To powinno służyć twojemu celowi.
źródło
Najłatwiejszy i poprawny sposób na jednej linii:
Klucz podstawowy i typy kolumn zostaną zachowane.
źródło
.dump
tworzy polecenieCREATE TABLE IF NOT EXISTS ...
i nie ma błędu, mimo że istnieje moja tabela docelowa.Do jednorazowej akcji możesz użyć .dump i .read.
Zrzuć tabelę my_table z pliku old_db.sqlite
Przeczytaj zrzut do pliku new_db.sqlite, zakładając, że tabela tam nie istnieje
Teraz sklonowałeś swój stół. Aby to zrobić dla całej bazy danych, po prostu pomiń nazwę tabeli w poleceniu .dump.
Bonus: bazy danych mogą mieć różne kodowania.
źródło
Kod celu C do kopiowania tabeli z bazy danych do innej bazy danych
źródło
Musiałem przenieść dane z kompaktowej bazy danych serwera sql do sqlite, więc używając sql server 2008 możesz kliknąć prawym przyciskiem myszy na tabelę i wybrać „Script Table To”, a następnie „Data to Inserts”. Skopiuj instrukcje wstawiania, aby usunąć instrukcje „GO” i zostało wykonane pomyślnie po zastosowaniu do bazy danych sqlite przy użyciu aplikacji „DB Browser for Sqlite”.
źródło
Pierwszy scenariusz: DB1.sqlite i DB2.sqlite mają tę samą tabelę (t1), ale DB1 jest bardziej „aktualny” niż DB2. Jeśli jest mały, usuń tabelę z bazy danych DB2 i utwórz ją ponownie z danymi:
Drugi scenariusz: jeśli jest to duży stół, lepiej będzie, jeśli
INSERT if not exists
zastosujesz rozwiązanie typu. Jeśli maszUnique Key
kolumnę, jest to prostsze, w przeciwnym razie musiałbyś użyć kombinacji pól (być może każdego pola), a w pewnym momencie nadal jest szybszedrop
ponownecreate
ustawienie tabeli; jest to zawsze prostsze (wymaga mniej myślenia).KONFIGURACJA: otwórz SQLite bez bazy danych, która tworzy bazę danych
temporary
w pamięcimain
, a następnieattach
DB1.sqlite i DB2.sqlitei użyj,
.databases
aby zobaczyć załączone bazy danych i ich pliki.źródło
UNIQUE
iPRIMARY KEY
cechy, więc jeśli masz te, to albo trzebaDROP TABLE
i ręcznieCREATE
iINSERT
czy używać.dump
i.read
metody wymienione powyżej przez @Thinkeye.