我正在编写Android应用程序并需要一个数据库。我将有三张桌子,但现在只设法制作一张。我在控制台中进行调试,然后在我的Javacode中实现它们。以下陈述是成功的:
sqlite3 progressapp.db
CREATE TABLE Z_Type(_Z_T_ID INTEGER PRIMARY KEY NOT NULL,
Description TEXT NOT NULL, Unit TEXT NOT NULL);
但是现在我想在我的另一个表中引用T_Type的PK:
CREATE TABLE goals (_Z_id INTEGER PRIMARY KEY NOT NULL, Title TEXT NOT NULL,
Type INTEGER NOT NULL, FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID),
Timeframe TEXT, Goaldate INTEGER);
Android中Type INTEGER NOT NULL, FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID)
是否是有效的SQLite语句?它说"错误:接近" Timeframe":语法错误"但由于我缺乏SQL体验,我根本无法找到它。
有没有更好的方法来引用FK?
答案 0 :(得分:3)
试试这个:
CREATE TABLE goals (_Z_id INTEGER PRIMARY KEY NOT NULL, Title TEXT NOT NULL,
Type INTEGER NOT NULL,Timeframe TEXT, Goaldate INTEGER, FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID));
我认为订单很重要。 有关进一步的文档,您可以访问sqlite.org/foreignkeys.html
答案 1 :(得分:0)
您可以将引用定义为列定义的一部分
CREATE TABLE goals (_Z_id INTEGER PRIMARY KEY NOT NULL, Title TEXT NOT NULL,
Type INTEGER NOT NULL REFERENCES Z_Type(_Z_T_ID),
Timeframe TEXT, Goaldate INTEGER);
答案 2 :(得分:0)
在sqlite CREATE TABLE语句中,列定义首先出现,表格约束仅在此之后出现。
FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID)
是一个表约束,应该在最后。