【问题标题】:in SQLite how to implement a many to many relationship在 SQLite 中如何实现多对多关系
【发布时间】:2013-01-09 17:14:53
【问题描述】:

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

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

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    查看documentation;它会告诉你,如果你在字段定义本身上指定一个外键,你不应该使用关键字 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 引擎确实期望它。

    【讨论】:

      【解决方案2】:

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

      FOREIGN KEY (STUDENITD)
      

      应该是

      FOREIGN KEY (STUDENTID)
      

      【讨论】:

      • 感谢您通知我错字。对此感到抱歉,但更改后仍然无法正常工作:/
      【解决方案3】:

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

      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)
      )
      

      【讨论】:

      • 这个还是不正确的:外键名不应该在括号里。此外,您在字段名称之后命名外键,这不是一个好习惯。
      • ...最后,在定义内联外键时,必须省略FOREIGN KEY constraint-name 部分,只指定REFERENCES table(field)。
      猜你喜欢
      • 2012-04-05
      • 2012-10-11
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多