创建表时使用FOREIGN KEY出现语法错误

11

我在调试器上得到了以下输出。我不确定缺失什么语法。

SQL代码是:

CREATE TABLE weeks(Week_Id INTEGER PRIMARY KEY, 
  Day TEXT, 
  Start_Time Text, 
  End_Time Text, 
  Break_Time Text );
CREATE TABLE projects(Project_Id INTEGER PRIMARY KEY,
  Name TEXT, 
  Description Text, 
  Client_Name Text, 
  Location Text );  
CREATE TABLE timesheets(Timesheet_Id INTEGER PRIMARY KEY,
  Project_Id  INTEGER,
  FOREIGN KEY (Project_Id) REFERENCES projects (Project_Id),
  Week_Id INTEGER,
  FOREIGN KEY (Week_Id) REFERENCES weeks (Week_Id));  

错误的本质是:

12-09 12:34:20.782: E/SQLiteLog(6490): (1) near "Week_Id": syntax error

有人吗?请帮忙。谢谢。 - Coder
1
你的FOREIGN KEY声明应该在变量声明之后,这可能是可能的。值得一试... - PearsonArtPhoto
你能详细说明一下吗?我不太明白你的意思。 - Coder
2个回答

24

尝试将FOREIGN KEY列表移至变量创建之后。

CREATE TABLE timesheets(Timesheet_Id INTEGER PRIMARY KEY,
  Project_Id  INTEGER,
  Week_Id INTEGER,
  FOREIGN KEY (Project_Id) REFERENCES projects (Project_Id),
  FOREIGN KEY (Week_Id) REFERENCES weeks (Week_Id)); 

我不是专家,但我猜测FOREIGN KEY应该是在CREATE TABLE字符串中最后处理的东西。很高兴它能工作 :-) - PearsonArtPhoto

5
根据SQLite语法(http://www.sqlite.org/lang_createtable.html),你还可以像这样编写代码:
CREATE TABLE timesheets(Timesheet_Id INTEGER PRIMARY KEY,
Project_Id  INTEGER REFERENCES projects (Project_Id),
Week_Id INTEGER REFERENCES weeks (Week_Id));

这将合并声明和外键。


1
这种方法的唯一问题是,如果您超出了SQLite的能力,将这些表迁移到其他SQL系统会变得困难。如果未来有计划转移到另一个SQL系统,则建议坚持使用标准的“FOREIGN KEY”定义。 - bmcminn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接