ALTER TABLE tbl_status ADD COLUMN status_default TEXT;
http://www.sqlite.org/lang_altertable.html
Mając na uwadze powyższe, dodając kolumny w SQLite jest ograniczona. Nie możesz dodać kolumny w dowolnym miejscu, ale po ostatniej kolumnie w tabeli.
Jeśli chodzi o sprawdzanie, czy kolumna już istnieje, PRAGMA table_info(tbl_status);
zwróci tabelę z listą różnych kolumn w tabeli.
ADD ON:
Używam strategii w projektowaniu baz danych, który umożliwia mi rozróżnić, jakie modyfikacje są wymagane. W tym celu potrzebna jest nowa tabela (pod numerem DBInfo
) z jednym polem (Integer, nazwij go SchemaVersion
). Alternatywnie istnieje również wartość wewnętrzna w SQLite o nazwie user_version
, którą można ustawić za pomocą komendy PRAGMA
. Twój kod może podczas uruchamiania programu sprawdzić numer wersji schematu i odpowiednio zastosować zmiany, jedną wersję na raz.
Załóżmy funkcję o nazwie UpdateDBSchema()
. Ta funkcja sprawdzi wersję schematu bazy danych, nie będzie obsługiwać DBInfo i określi, że baza danych jest w wersji 0. Reszta tej funkcji może być po prostu dużym przełącznikiem z różnymi wersjami, zagnieżdżonymi w pętli (lub innej dostępnej strukturze do wybranej platformy).
Więc dla tej pierwszej wersji, mają UpgradeDBVersion0To1()
funkcję, która będzie tworzyć tę nową tabelę (DBInfo
), dodać pole status_default
i ustaw SchemaVersion
do 1. W kodzie dodać stałą wskazującą najnowszą wersję schematu, powiedz LATEST_DB_VERSION
i ustaw go na 1. W ten sposób twój kod i baza danych mają wersję schematu i wiesz, że musisz je zsynchronizować, jeśli nie są równe.
Jeśli chcesz wprowadzić kolejną zmianę w swoim schemacie, ustaw stałą na LATEST_DB_VERSION
na 2 i wykonaj nową funkcję UpgradeDBVersion1To2()
, która wykona wymagane zmiany.
W ten sposób Twój program może być łatwo przenoszony, może łączyć się i aktualizować starą bazę danych itp.
Jakiś powód, dla którego nie sprawdzono składni SQLite SQL na stronie http://www.sqlite.org? Składnia polecenia ALTER TABLE do dodania nowej kolumny nie ma żadnych modyfikatorów typu IF NOT EXISTS, co oznacza, że będziesz musiał tylko obsłużyć wyjątek/błąd we własnym kodzie. –
Adam, zaktualizowałem swoją odpowiedź. Patrz poniżej. – MPelletier