Frage

Wie füge ich eine zusätzliche Spalte zu einer vorhandenen SQLite-2-Datenbanktabelle, die damit verbundenen Daten und Indizes hat.

Es scheint, wie die alten table SQL für das heißt in sqlite2 nicht verfügbar?

War es hilfreich?

Lösung

Von dem SqLite FAQ :

SQLite hat ALTER TABLE Unterstützung beschränkt, die eine Spalte mit dem Ende einer Tabelle hinzufügen können oder den Namen einer Tabelle ändern. Wenn Sie komplexere Änderungen in der Struktur einer Tabelle machen wollen, müssen Sie die Tabelle neu erstellen. Sie können vorhandene Daten in eine temporäre Tabelle speichern, die alte Tabelle löschen, die neue Tabelle erstellen, dann kopieren Sie die Daten zurück in aus der temporären Tabelle.

Angenommen, Sie eine Tabelle mit dem Namen „t1“ mit Spaltennamen „a“, „b“ und „c“ und dass Sie aus dieser Tabelle Spalte „c“ löschen. Die folgenden Schritte zeigen, wie dies geschehen könnte:

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;

Andere Tipps

Es kann nicht sein - sqlite3 hat für eine Weile aus. Sie werden einen anderen DB mit der Tabelle erstellen müssen, wie Sie es wollen und die Daten kopieren. Oder eine neue Tabelle erstellen, um die Daten kopieren, legen Sie die Vorlage und ersetzt mit dem neuen.

Vergessen Sie nicht, dass DROP TABLE fällt auch Trigger zugeordnet ist.

Bevor Sie gehen in der Tabelle verwenden Sie den Befehl ändern

.scheme TABLE_TO_MODIFY

, die alle aktuellen Aussagen Dump wird, die mit den Auslösern fallen gelassen werden, die Sie brauchen, um neu zu erstellen.

Cheers,

Elixon

Sie dies nicht tun. Nicht trivial Modifikation von Tabellen wird nicht unterstützt. Was würden Sie tun müssen, ist:

  1. Kopieren Sie die Daten in eine temporäre Tabelle löschen Sie die alte
  2. Erstellen Sie die neue Tabelle
  3. Kopieren der Daten aus Original-Tabelle es
  4. Erstellen Sie die neue Tabelle
  5. Kopieren Sie die Daten von Temp in die neue Tabelle
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top