2013-01-09 60 views
4

我在做,有一个多对多的关系,我已经打破这件事SQLite数据库为两个一到下面的代码SQLite中如何实现多对多的关系

SQLiteManager: CREATE TABLE "main"."LESSONS" 
(
    "LESSONID" INTEGER PRIMARY KEY 
    NOT NULL , "MODULEID" INTEGER, FOREIGN KEY(MODULEID) REFERENCES MODULES 
    (MODULEID), "STUDENTID" INTEGER, FOREIGN KEY (STUDENITD) REFERENCES STUDENTS 
    (STUDENTID) 
)  

错误一对多的关系:

[near ""STUDENTID"": syntax error ] 
Exception Name: NS_ERROR_FAILURE 
Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) 
[mozIStorageConnection.createStatement] 

没有人知道我该如何解决这个错误?

回答

7

查看documentation;它会告诉你,如果你在字段定义本身指定一个外键,你不应该使用关键字FOREIGN KEY本身。此外,您使用了太多的逗号,正如CL所指出的那样。,即使分别指定约束时,外键名称也不应位于括号内。

这种说法你想要做什么:

CREATE TABLE "LESSONS" 
(
    "LESSONID" INTEGER PRIMARY KEY NOT NULL, 
    "MODULEID" INTEGER REFERENCES MODULES(MODULEID), 
    "STUDENTID" INTEGER REFERENCES STUDENTS(STUDENTID) 
); 

还要注意的是,如果是的moduleId模块表的主键,那么你不必指定它本身; SQLite不需要它。话虽如此,我更喜欢这样指定它,因为其他SQL引擎确实期望它。

1

您对声明foreign key

FOREIGN KEY (STUDENITD) 

一个错字误差应

FOREIGN KEY (STUDENTID) 
+0

感谢您通知我错字。对不起,但更改后,它仍然无法正常工作:/ –

2

你有太多的逗号。 列属性不能用逗号分隔;仅在表列之间使用它们:

CREATE TABLE "LESSONS" 
(
    "LESSONID" INTEGER PRIMARY KEY NOT NULL, 
    "MODULEID" INTEGER FOREIGN KEY (MODULEID) REFERENCES MODULES(MODULEID), 
    "STUDENTID" INTEGER FOREIGN KEY (STUDENTID) REFERENCES STUDENTS(STUDENTID) 
) 
+0

这一个仍然不正确:外键名称不应该在括号中。此外,您在字段名称后面命名外键,这不是好习惯。 – Martijn

+0

...最后,当定义一个外键内联时,你必须省略'FOREIGN KEY约束名称部分,并且只需指定'REFERENCES table(field)'。 – Martijn

相关问题