Ich habe ein Problem: Ich muss eine Spalte aus meiner SQLite-Datenbank löschen. Ich habe diese Abfrage geschrieben
alter table table_name drop column column_name
aber es funktioniert nicht. Bitte hilf mir.
Von: http://www.sqlite.org/faq.html :
(11) Wie füge ich Spalten zu einer vorhandenen Tabelle in SQLite hinzu oder lösche sie?
SQLite bietet nur eingeschränkte Unterstützung für ALTER TABLE, mit der Sie eine Spalte am Ende einer Tabelle hinzufügen oder den Namen einer Tabelle ändern können. Wenn Sie komplexere Änderungen an der Struktur einer Tabelle vornehmen möchten, 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 die Daten dann wieder aus der temporären Tabelle kopieren.
Angenommen, Sie haben eine Tabelle mit dem Namen "t1" mit den Spaltennamen "a", "b" und "c" und möchten die Spalte "c" aus dieser Tabelle löschen. Die folgenden Schritte veranschaulichen, wie dies getan werden kann:
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;
TEMPORARY
vonCREATE TABLE
.Anstatt die Sicherungstabelle zu löschen, benennen Sie sie einfach um ...
quelle
t1
.Erstellen Sie der Einfachheit halber die Sicherungstabelle aus der select-Anweisung.
quelle
TEXT
.Diese Option funktioniert nur, wenn Sie die Datenbank in einem DB-Browser wie DB Browser for SQLite öffnen können .
Im DB Browser für SQLite:
quelle
=> Erstellen Sie eine neue Tabelle direkt mit der folgenden Abfrage:
=> Fügen Sie nun die Daten mit der folgenden Abfrage aus der vorhandenen Tabelle in den Tabellennamen ein:
=> Löschen Sie nun die vorhandene Tabelle durch folgende Abfrage:
quelle
Ich habe eine Python- Funktion erstellt, in der Sie die Tabelle und die Spalte eingeben, die als Argumente entfernt werden sollen:
Gemäß den Informationen zu den Antworten von Duda und MeBigFatGuy funktioniert dies nicht, wenn ein Fremdschlüssel in der Tabelle vorhanden ist. Dies kann jedoch mit zwei Codezeilen behoben werden (Erstellen einer neuen Tabelle und nicht nur Umbenennen der temporären Tabelle).
quelle
Für SQLite3 c ++:
quelle
Falls jemand eine (fast) einsatzbereite PHP-Funktion benötigt, basiert Folgendes auf dieser Antwort :
Im Gegensatz zu anderen Antworten scheint die in diesem Ansatz verwendete SQL die Datentypen der Spalten beizubehalten, während so etwas wie die akzeptierte Antwort dazu führt, dass alle Spalten vom Typ sind
TEXT
.Update 1:
Das verwendete SQL hat den Nachteil, dass
autoincrement
Spalten nicht erhalten bleiben.quelle
Nur für den Fall, dass es jemandem wie mir helfen könnte.
Basierend auf der offiziellen Website und der akzeptierten Antwort habe ich mit C # einen Code erstellt , der das System.Data.SQLite NuGet-Paket verwendet.
Dieser Code behält auch den Primärschlüssel und den Fremdschlüssel bei .
CODE in C #:
quelle
Für weitere Informationen: https://www.techonthenet.com/sqlite/tables/alter_table.php
quelle