【问题标题】:Syntax Error near ScanIDScanID 附近的语法错误
【发布时间】:2013-07-23 17:30:07
【问题描述】:

晚上好

我一直在开发一个小型应用程序,但有点卡在 SQLite 外键约束上。基本上我所拥有的是一个“HostLookuptable”

CREATE TABLE tblHostLookup ( 
HostID INTEGER PRIMARY KEY AUTOINCREMENT, 
HostName TEXT);

还有一个“ScanLookuptable”作为

CREATE TABLE tblScanLookup ( 
ScanID INTEGER PRIMARY KEY AUTOINCREMENT, 
ScanDate TEXT);

然后有另一个表将在两个表之间映射为“ScanHistorytable”

CREATE TABLE tblScanHistory (
ScanHistoryID INTEGER PRIMARY KEY AUTOINCREMENT,
HostID INTEGER,
FOREIGN KEY(HostID) REFERENCES tblHostLookup(HostID),
ScanID INTEGER,
FOREIGN KEY(ScanID) REFERENCES tblScanLookup(ScanID));

但我一直收到错误提示

Syntax error near ScanID

为什么会这样?我们不允许在一张表中有多个外键吗?在这方面的任何帮助都会很棒。

谢谢

【问题讨论】:

  • 如果是外键限制,则尝试删除 HostID 外键,看看会发生什么。
  • @MarcB 它可以完美地使用一个外键...但是我们真的不允许拥有多个外键吗?
  • 没有看到任何关于 FK 数量限制 (sqlite.org/foreignkeys.html) 的内容,因此也许开始查看其中是否有任何可能导致解析错误的不可见字符,例如在第一个 HostID 外键行之后。尝试重新输入整个创建查询。
  • @MarcB No.. 它不工作:(

标签: sqlite foreign-key-relationship


【解决方案1】:

您不能混合使用表列和表约束;约束必须列在所有列之后:

CREATE TABLE tblScanHistory (
    ScanHistoryID INTEGER PRIMARY KEY AUTOINCREMENT,
    HostID INTEGER,
    ScanID INTEGER,
    FOREIGN KEY(HostID) REFERENCES tblHostLookup(HostID),
    FOREIGN KEY(ScanID) REFERENCES tblScanLookup(ScanID)
);

或者,更简单:

CREATE TABLE tblScanHistory (
    ScanHistoryID INTEGER PRIMARY KEY AUTOINCREMENT,
    HostID INTEGER REFERENCES tblHostLookup(HostID),
    ScanID INTEGER REFERENCES tblScanLookup(ScanID)
);

【讨论】:

  • 非常感谢伙计...它成功了!奇怪,虽然我认为每一列都应该保留它的外键......不过感谢您清除它
  • 在第二种形式中,FK do 保留在它们的列中。要提出问题,请使用“”按钮。
  • 感谢您的帮助...不要打扰我自己解决的其他问题
猜你喜欢
  • 1970-01-01
  • 2013-06-22
  • 2017-08-31
  • 2023-03-03
  • 2016-02-16
  • 2018-08-21
  • 2017-01-12
  • 2014-03-12
  • 1970-01-01
相关资源
最近更新 更多