Mam problem: muszę usunąć kolumnę z mojej bazy danych SQLite. Napisałem to zapytanie
alter table table_name drop column column_name
ale to nie działa. Proszę pomóż mi.
Od: http://www.sqlite.org/faq.html :
(11) Jak dodać lub usunąć kolumny z istniejącej tabeli w SQLite.
SQLite ma ograniczoną obsługę ALTER TABLE, której możesz użyć do dodania kolumny na końcu tabeli lub do zmiany nazwy tabeli. Jeśli chcesz wprowadzić bardziej złożone zmiany w strukturze tabeli, będziesz musiał ponownie utworzyć tabelę. Możesz zapisać istniejące dane w tabeli tymczasowej, usunąć starą tabelę, utworzyć nową, a następnie skopiować dane z powrotem z tabeli tymczasowej.
Na przykład załóżmy, że masz tabelę o nazwie „t1” z nazwami kolumn „a”, „b” i „c” oraz że chcesz usunąć kolumnę „c” z tej tabeli. Poniższe kroki ilustrują, jak można to zrobić:
BEGIN TRANSACTION; CREATE TEMPORARY TABLE t1_backup(a,b); INSERT INTO t1_backup SELECT a,b FROM t1; DROP TABLE t1; CREATE TABLE t1(a,b); INSERT INTO t1 SELECT a,b FROM t1_backup; DROP TABLE t1_backup; COMMIT;
TEMPORARY
zCREATE TABLE
.Zamiast upuszczać tabelę kopii zapasowych, po prostu zmień jej nazwę ...
źródło
t1
.Dla uproszczenia, dlaczego nie utworzyć tabeli kopii zapasowej na podstawie instrukcji select?
źródło
TEXT
.Ta opcja działa tylko wtedy, gdy możesz otworzyć DB w przeglądarce DB, takiej jak przeglądarka DB dla SQLite .
W przeglądarce DB dla SQLite:
źródło
=> Utwórz nową tabelę bezpośrednio za pomocą następującego zapytania:
=> Teraz wstaw dane do nazwa_tabeli z istniejącej_tabeli za pomocą następującego zapytania:
=> Teraz upuść istniejącą tabelę, wykonując następujące zapytanie:
źródło
Dla SQLite3 c ++:
źródło
Stworzyłem funkcję Pythona, w której wpisujesz tabelę i kolumnę, aby usunąć jako argumenty:
Zgodnie z informacją o odpowiedziach Dudy i MeBigFatGuy to nie zadziała, jeśli w tabeli znajduje się klucz obcy, ale można to naprawić za pomocą 2 linii kodu (tworzenie nowej tabeli, a nie tylko zmiana nazwy tabeli tymczasowej)
źródło
W przypadku, gdy ktoś potrzebuje (prawie) gotowej do użycia funkcji PHP, na podstawie tej odpowiedzi przedstawiono następujące :
W przeciwieństwie do innych odpowiedzi, SQL używany w tym podejściu wydaje się zachowywać typy danych kolumn, podczas gdy coś w rodzaju zaakceptowanej odpowiedzi wydaje się skutkować tym, że wszystkie kolumny są typu
TEXT
.Aktualizacja 1:
Użyty SQL ma tę wadę, że
autoincrement
kolumny nie są zachowywane.źródło
Na wszelki wypadek, gdyby to mogło pomóc komuś takiemu jak ja.
Opierając się na oficjalnej stronie internetowej i zaakceptowanej odpowiedzi , stworzyłem kod przy użyciu C #, który używa System.Data.SQLite pakietu NuGet.
Ten kod zachowuje również klucz podstawowy i klucz obcy .
KOD w C #:
źródło
Więcej informacji: https://www.techonthenet.com/sqlite/tables/alter_table.php
źródło