6

我正在创建一个具有多对多关系的 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]

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

4

3 回答 3

13

查看文档;它会告诉您,如果您在字段定义本身上指定外键,则不应使用关键字FOREIGN KEY本身。此外,正如CL所指出的,您使用了太多逗号。,即使单独指定约束时,外键名称也不应该在括号中。

此语句执行您想要的操作:

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

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

于 2013-01-09T09:14:53.040 回答
2

您在声明时遇到拼写错误foreign key

FOREIGN KEY (STUDENITD)

应该

FOREIGN KEY (STUDENTID)
于 2013-01-09T02:39:06.107 回答
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)
)
于 2013-01-09T08:54:39.597 回答