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