2012-07-18 23 views
35

Ich befolge die Anweisungen aus der SQLite-Dokumentation unter http://www.sqlite.org/foreignkeys.html, aber mein Versuch, einen Fremdschlüssel hinzuzufügen, schlägt fehl. Hier sind meine create Anweisungen:SQLite Foreign Key

CREATE TABLE 
    checklist (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_title TEXT, 
     description TEXT, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 

CREATE TABLE 
    item (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     FOREIGN KEY(checklist_id) REFERENCES checklist(_id), 
     item_text TEXT, item_hint TEXT, 
     item_order INTEGER, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 

Die erste Tabelle ist gut gemacht. Der Fehler tritt in der zweiten Anweisung auf. Ich habe beide mit dem Wrapping der beiden Abfragen in einer Transaktion und ohne versucht. Hier ist der Fehler:

unbekannt Spalte "checklist_id" in Fremdschlüsseldefinition (Code 1):, beim Kompilieren: TABLE Artikel CREATE (_ID INTEGER PRIMARY KEY AUTOINCREMENT, FOREIGN KEY (checklist_id) LITERATUR Checkliste (_id), ITEM_TEXT TEXT , item_hint TEXT, item_order INTEGER, created_on INTEGER, modified_on INTEGER)

Antwort

69

Sie müssen die Spalte noch erstellen, bevor Sie sie als Fremdschlüssel hinzufügen.

So wäre es:

CREATE TABLE 
    checklist (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_title TEXT, 
     description TEXT, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 

CREATE TABLE 
    item (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_id INTEGER, 
     item_text TEXT, 
     item_hint TEXT, 
     item_order INTEGER, 
     created_on INTEGER, 
     modified_on INTEGER, 
     FOREIGN KEY(checklist_id) REFERENCES checklist(_id) 
    ); 
+0

Doh! Dank an alle! :-) –

+8

Eigentlich gab es ein Problem damit ... die Einschränkung muss kommen, nachdem alle Felder definiert sind. Daher sollte die Fremdschlüsselzeile nach modifyed_on sein. (Falls sich jemand 2019 um Hilfe kümmert. Hallo aus der Vergangenheit!) –

+0

Ich habe das behoben. @ GeeksOnHugs, sollten Sie in der Lage sein, eine Antwort auf Ihre Fragen zu bearbeiten. Jemand muss die Bearbeitung genehmigen, aber in Zukunft, wenn die Antwort von jemandem einen Fehler hat, kannst du es für diese Leute 2019 bearbeiten :) – Scen

4

Sie müssen den Spaltennamen enthalten, bevor Sie es mit FOREIGN KEY wickeln().

CREATE TABLE 
    item (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_id INTEGER, 
     FOREIGN KEY(checklist_id) REFERENCES checklist(_id), 
     item_text TEXT, item_hint TEXT, 
     item_order INTEGER, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 
5

einfach Sie vermissen checklist_id Spalte in Artikel Tabelle. Sie müssen es deklarieren, bevor Sie es als FOREIGN KEY setzen möchten. Sie haben versucht, FK auf nicht vorhandene Spalte zu erstellen, und das ist der Grund, warum es nicht funktioniert.

So müssen Sie diese hinzufügen:

checklist_id INTEGER, 
FOREIGN KEY(checklist_id) REFERENCES checklist(_id) 

jetzt sollte es funktioniert.

3

Setzen Sie die FOREIGN KEY-Definition am Ende der SQL-Anweisung