422 Stimmen

Neue Spalte in Tabelle in Sqlite einfügen?

Ich habe eine Tabelle mit Spalten name , qty , rate . Jetzt muss ich eine neue Spalte hinzufügen COLNew zwischen den name y qty Spalten. Wie kann ich eine neue Spalte zwischen zwei Spalten einfügen?

772voto

Raceimaztion Punkte 9204

Sie haben zwei Möglichkeiten. Erstens können Sie einfach eine neue Spalte mit folgendem Inhalt hinzufügen:

ALTER TABLE {tableName} ADD COLUMN COLNew {type};

Die zweite Möglichkeit, die komplizierter ist, aber die Spalte tatsächlich an die gewünschte Stelle bringt, besteht darin, eine neue Tabelle mit der fehlenden Spalte und einem vorläufigen neuen Namen zu erstellen:

CREATE TABLE {tempNewTableName} (name TEXT, COLNew {type} DEFAULT {defaultValue}, qty INTEGER, rate REAL);

Und füllen Sie sie mit den alten Daten auf:

INSERT INTO {tempNewTableName} (name, qty, rate) SELECT name, qty, rate FROM OldTable;

Löschen Sie dann die alte Tabelle:

DROP TABLE OldTable;

Benennen Sie dann die neue Tabelle so um, dass sie den Namen der OldTable hat:

ALTER TABLE {tempNewTableName} RENAME TO OldTable;

Ich würde die zweite Option bevorzugen, da sie es Ihnen ermöglicht, alles komplett umzubenennen, wenn es nötig ist.

136voto

paxdiablo Punkte 809679

Sie fügen keine Spalten hinzu zwischen andere Spalten in SQL, Sie fügen sie einfach hinzu. Wo sie eingefügt werden, hängt ganz vom DBMS ab. Der richtige Ort, um sicherzustellen, dass die Spalten in der richtigen Reihenfolge ausgegeben werden, ist, wenn Sie select sie.

Mit anderen Worten, wenn Sie sie in der Reihenfolge {name,colnew,qty,rate} verwenden Sie:

select name, colnew, qty, rate from ...

Mit SQLite müssen Sie alter table ein Beispiel:

alter table mytable add column colnew char(50)

16voto

Mudassir Punkte 14250

Sie können eine neue Spalte mit der Abfrage hinzufügen

ALTER TABLE TableName ADD COLUMN COLNew CHAR(25)

Sie wird jedoch am Ende und nicht zwischen den bestehenden Spalten eingefügt.

12voto

CJH Punkte 1295

SQLite hat eine begrenzte ALTER TABLE-Unterstützung, die Sie verwenden können, um eine Spalte am Ende einer Tabelle hinzuzufügen oder den Namen einer Tabelle zu ändern.

Wenn Sie komplexere Änderungen an der Struktur einer Tabelle vornehmen wollen, müssen Sie die Tabelle neu erstellen. Sie können vorhandene Daten in einer temporären Tabelle speichern, die alte Tabelle löschen, die neue Tabelle erstellen und dann die Daten aus der temporären Tabelle wieder hineinkopieren.

Angenommen, Sie haben eine Tabelle mit dem Namen "t1" und den Spaltennamen "a" und "c" und möchten die Spalte "b" aus dieser Tabelle einfügen. Die folgenden Schritte veranschaulichen, wie dies geschehen könnte:

BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,c);
INSERT INTO t1_backup SELECT a,c FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b, c);
INSERT INTO t1 SELECT a,c FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;

Jetzt können Sie Ihre neuen Daten wie folgt einfügen:

UPDATE t1 SET b='blah' WHERE a='key'

6voto

Naval Kishor Jha Punkte 824
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
UPDATE {tableName} SET COLNew = {base on {type} pass value here};

Diese Aktualisierung ist erforderlich, um den Nullwert zu behandeln und einen Standardwert nach Bedarf einzugeben. Wie in Ihrem Fall, müssen Sie die SELECT Abfrage und Sie erhalten die Reihenfolge der Spalten, wie paxdiablo sagte bereits:

SELECT name, colnew, qty, rate FROM{tablename}

und meiner Meinung nach den Namen Ihrer Spalte, um den Wert vom Cursor zu erhalten:

private static final String ColNew="ColNew";
String val=cursor.getString(cursor.getColumnIndex(ColNew));

Wenn sich also der Index ändert, wird Ihre Anwendung keine Probleme haben.

Dies ist der sichere Weg in dem Sinne, dass Sie sonst, wenn Sie die CREATE temptable o RENAME table o CREATE Bei unvorsichtiger Handhabung besteht ein hohes Risiko von Datenverlusten, z. B. wenn Ihre Transaktionen stattfinden, während die Batterie leer ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X