2017-05-09 57 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

謝謝...很棒的信息 –