204 Stimmen

Wie füge ich einen Fremdschlüssel zu einer bestehenden SQLite-Tabelle hinzu?

Ich habe die folgende Tabelle:

CREATE TABLE child( 
  id INTEGER PRIMARY KEY, 
  parent_id INTEGER, 
  description TEXT);

Wie füge ich eine Fremdschlüssel-Beschränkung für parent_id ? Angenommen, Fremdschlüssel sind aktiviert.

Die meisten Beispiele gehen davon aus, dass Sie die Tabelle erstellen - ich möchte die Einschränkung zu einer bestehenden Tabelle hinzufügen.

5voto

Jamshy EK Punkte 49

Sie können dies versuchen:

ALTER TABLE [Child] ADD COLUMN column_name INTEGER REFERENCES parent_table_name(column_id);

3voto

Baso Punkte 1324

Wenn Sie das Firefox-Add-on sqlite-manager verwenden, können Sie wie folgt vorgehen:

Anstatt die Tabelle zu löschen und neu zu erstellen, kann man sie einfach wie folgt ändern.

Klicken Sie im Textfeld Spalten mit der rechten Maustaste auf den letzten aufgeführten Spaltennamen, um das Kontextmenü aufzurufen, und wählen Sie Spalte bearbeiten. Wenn die letzte Spalte in der TABLE-Definition der PRIMARY KEY ist, müssen Sie zunächst eine neue Spalte hinzufügen und dann den Spaltentyp der neuen Spalte bearbeiten, um die FOREIGN KEY-Definition hinzufügen zu können. Fügen Sie im Feld Column Type ein Komma und die

FOREIGN KEY (parent_id) REFERENCES parent(id)

Definition nach Datentyp. Klicken Sie auf die Schaltfläche Ändern und dann auf die Schaltfläche Ja im Dialogfeld Gefährliche Operation.

Referenz: Sqlite-Manager

3voto

Gaurav Vanani Punkte 167

Wenn Sie Db Browser für Sqlite verwenden, dann wird es für Sie einfach sein, die Tabelle zu ändern. Sie können Fremdschlüssel in bestehende Tabelle hinzufügen, ohne eine Abfrage zu schreiben.

  • Öffnen Sie Ihre Datenbank im Db-Browser,
  • Klicken Sie einfach mit der rechten Maustaste auf die Tabelle und dann auf Ändern,
  • Dort blättern Sie zur Spalte Fremdschlüssel,
  • Doppelklicken Sie auf das Feld, das Sie ändern möchten,
  • Wählen Sie dann die Tabelle und das entsprechende Feld aus und klicken Sie auf OK.

Das war's. Sie haben erfolgreich einen Fremdschlüssel zu einer bestehenden Tabelle hinzugefügt.

2voto

passionatedevops Punkte 467

Erstellen Sie einen Fremdschlüssel zur bestehenden SQLLite-Tabelle:

Für SQL LITE gibt es keine direkte Möglichkeit, dies zu tun. Führen Sie die folgende Abfrage aus, um die Tabelle STUDENTS mit Fremdschlüsseln neu zu erstellen. Führen Sie die Abfrage aus, nachdem Sie die ursprüngliche Tabelle STUDENTS erstellt und Daten in die Tabelle eingefügt haben.

CREATE TABLE    STUDENTS    (       
    STUDENT_ID  INT NOT NULL,   
    FIRST_NAME  VARCHAR(50) NOT NULL,   
    LAST_NAME   VARCHAR(50) NOT NULL,   
    CITY    VARCHAR(50) DEFAULT NULL,   
    BADGE_NO    INT DEFAULT NULL
    PRIMARY KEY(STUDENT_ID) 
);

Fügen Sie Daten in die Tabelle STUDENTS ein.

Fügen Sie dann FOREIGN KEY hinzu: BADGE_NO wird zum Fremdschlüssel derselben Tabelle STUDENTS

BEGIN;
CREATE TABLE STUDENTS_new (
    STUDENT_ID  INT NOT NULL,   
    FIRST_NAME  VARCHAR(50) NOT NULL,   
    LAST_NAME   VARCHAR(50) NOT NULL,   
    CITY    VARCHAR(50) DEFAULT NULL,   
    BADGE_NO    INT DEFAULT NULL,
    PRIMARY KEY(STUDENT_ID) ,
    FOREIGN KEY(BADGE_NO) REFERENCES STUDENTS(STUDENT_ID)   
);
INSERT INTO STUDENTS_new SELECT * FROM STUDENTS;
DROP TABLE STUDENTS;
ALTER TABLE STUDENTS_new RENAME TO STUDENTS;
COMMIT;

können wir den Fremdschlüssel auch aus jeder anderen Tabelle hinzufügen.

0voto

szilkov Punkte 9

Falls jemand anderes Informationen über SQLiteStudio benötigt, können Sie diese leicht über die GUI erhalten.

Doppelklicken Sie auf die Spalte und doppelklicken Sie auf die Fremdschlüsselzeile, markieren Sie dann den Fremdschlüssel und klicken Sie auf Konfigurieren. Sie können die Referenzspalte hinzufügen und dann in jedem Fenster auf OK klicken.

Klicken Sie abschließend auf das grüne Häkchen, um die Änderungen an der Struktur zu übernehmen.

BEACHTEN SIE, DASS DIESE SCHRITTE SQL-SKRIPTE ERSTELLEN, DIE DIE TABELLE LÖSCHEN UND NEU ERSTELLEN!!

Sichern Sie Ihre Daten in der Datenbank.

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