2017-05-09 69 views

回答

1

外键约束定义不包含类型名称。它可以连接到一列定义,它可以有一个类型名称,但该类型名称属于列本身:如上图所示

CREATE TABLE Parent (
    ID INTEGER PRIMARY KEY, 
    Name TEXT, 
    [...] 
); 
CREATE TABLE Child (
    [...], 
    ParentID INTEGER REFERENCES Parent(ID) 
    -- column def. -- ---- foreign key ---- 
); 

所有三列有型,但外键约束与开始REFERENCES并且不包含类型。

外键约束也可以写成表约束:

CREATE TABLE Child (
    ParentID INTEGER, 
    [...], 
    FOREIGN KEY ParentID REFERENCES Parent(ID) 
); 

这种形式使得它很明显,没有为约束没有单独的类型。


总之,SQLite的使用dynamic typing,在大多数情况下,忽略了类型名称,所以不要紧,你在写什么那里,或者如果您使用的是类型的。

+0

谢谢您的意见。它让我以更好的视角看待我的问题。 你所提到的,“它可以连接到一个列的定义,它可以有一个类型名称,但该类型名称属于列本身” 你使用: PARENTID INTEGER参考文献父(ID) 我做不了解INTEGER在此方面的作用。它可以写为: ParentID REFERENCES父(ID) 没有明显的行为变化。 为什么有人会想要声明该类型,如果它没有作用的任何细微的原因?它有一个我无法察觉的目的吗? –

+1

SQlite实际上使用[affninity]的类型(http://www.sqlite.org/datatype3.html#affinity),但在大多数情况下,该类型只是文档。 –

+0

谢谢...很棒的信息 –