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?
Antworten
Zu viele Anzeigen?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.
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)
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'
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.
- See previous answers
- Weitere Antworten anzeigen