Klucz Obcy SQLite

Postępuję zgodnie z instrukcjami z dokumentacji SQLite na http://www.sqlite.org/foreignkeys.html jednak moja próba dodania obcego klucza nie powiodła się. Oto moje wypowiedzi create:

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
    );

Pierwsza tabela jest dobrze wykonana. Błąd występuje w drugim poleceniu. Próbowałem zarówno z owijaniem dwóch zapytań w transakcji, jak i bez. Oto błąd:

Unknown column "checklist_id" in foreign key definition (code 1):, while compiling: CREATE Tabela 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)

Author: Geeks On Hugs, 2012-07-18

4 answers

Musisz jeszcze utworzyć kolumnę, zanim dodasz ją jako klucz obcy.

Tak by było:

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)
    );
 71
Author: Scen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-18 17:25:33

Po prostu brakuje checklist_id kolumny w pozycji tabeli. Musisz ją zadeklarować, zanim chcesz ustawić ją jako FOREIGN KEY. Próbowałeś utworzyć FK na nieistniejącej kolumnie i to jest powód, dla którego to nie działa.

Więc musisz dodać to:

checklist_id INTEGER,
FOREIGN KEY(checklist_id) REFERENCES checklist(_id)
Teraz powinno działać.
 4
Author: Simon Dorociak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-18 15:55:12

Musisz dołączyć nazwę kolumny, zanim zawiążesz ją za pomocą klucza obcego().

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
    );
 3
Author: lorraine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-18 15:49:03

Umieść definicję klucza obcego na końcu instrukcji SQL

 2
Author: rudakovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-05 13:14:26