webentwicklung-frage-antwort-db.com.de

SQLite-Änderungsspalte

Ich muss eine Spalte in einer SQLite-Datenbank ändern, dies muss jedoch programmgesteuert erfolgen, da die Datenbank bereits in Produktion ist. Meine Recherchen haben ergeben, dass ich dazu Folgendes tun muss.

  • Erstellen Sie eine neue Tabelle mit neuem Schema
  • Daten aus alter Tabelle in neue Tabelle kopieren
  • Lass den alten Tisch fallen
  • Neue Tabelle in alten Tabellennamen umbenennen

Das scheint eine lächerliche Menge Arbeit für etwas zu sein, das relativ einfach sein sollte. Gibt es keinen einfacheren Weg? Ich muss lediglich eine Einschränkung für eine vorhandene Spalte ändern und ihr einen Standardwert zuweisen.

43
Nathan

Das ist einer der bekannteren Nachteile von SQLite (no MODIFY COLUMN Unterstützung bei ALTER TABLE), aber es steht auf Liste der SQL-Funktionen, die SQLite nicht implementiert .

edit: Das erwähnte Bit wurde entfernt und wird möglicherweise in einer zukünftigen Version unterstützt, da die Seite aktualisiert wurde, um anzuzeigen, dass dies nicht mehr der Fall ist

42
Daniel DiPaolo

Wenn die Änderung nicht zu groß ist (z. B. die Länge eines Varchars ändern), können Sie die Datenbank sichern, die Datenbankdefinition manuell bearbeiten und erneut importieren:

echo '.dump' | sqlite3 test.db > test.dump

öffnen Sie dann die Datei mit einem Texteditor, suchen Sie nach der Definition, die Sie ändern möchten, und führen Sie folgende Schritte aus:

cat test.dump | sqlite3 new-test.db
22
Davide Vernizzi

Wie gesagt hier , diese Art von Funktionen werden von SQLite nicht implementiert.

Als Randnotiz könnten Sie Ihre zwei ersten Schritte mit einer Erstellungs-Tabelle mit select machen:

CREATE TABLE tmp_table AS SELECT id, name FROM src_table

Als ich "CREATE TABLE tmp_table AS SELECT id, name FROM src_table" ausführte, verlor ich die gesamte Formatierung des Spaltentyps (z. B. das Zeitfeld wurde zu einem Ganzzahlfeld)

Wie eingangs erwähnt, scheint es einfacher zu sein, aber hier ist, was ich getan habe, um zu beheben. Ich hatte dieses Problem, weil ich das Feld Not Null in einer Spalte ändern wollte und Sqlite dort nicht wirklich hilft.

Verwenden des Firefox-Addon-Browsers "SQLite Manager" (verwenden Sie, was Sie möchten). Ich habe die neue Tabelle durch Kopieren der alten create-Anweisung erstellt, meine Änderung vorgenommen und sie ausgeführt. Um die Daten zu kopieren, habe ich einfach die Zeilen markiert, mit der rechten Maustaste auf "Zeile (n) als SQL kopieren" geklickt, "someTable" durch meinen Tabellennamen ersetzt und SQL ausgeführt.

1
rich