2014-02-08 51 views
2

關於SQLite,REFERENCES與或沒有FOREIGN KEY有什麼區別?REFERENCES與或沒有FOREIGN KEY有什麼區別

是什麼這個

CREATE TABLE players_set ( 
    _id   INTEGER PRIMARY KEY AUTOINCREMENT 
          NOT NULL, 
    player_id  INTEGER REFERENCES players (_id) ON DELETE CASCADE, 
    players_set_id INTEGER REFERENCES players_set_names (_id) 
); 

,這之間的區別:

CREATE TABLE players_set ( 
    _id   INTEGER PRIMARY KEY AUTOINCREMENT 
          NOT NULL, 
    player_id INTEGER, 
    players_set_id INTEGER REFERENCES players_set_names (_id), 
    FOREIGN KEY (player_id) REFERENCES players (_id) ON DELETE CASCADE   
); 

我發現這個其他問題: Difference between using REFERENCES with and without FOREIGN KEY?

我讀the documentation,它並沒有說清楚儘管如此。

準確地說,我在Android(因此標籤)上使用SQLite。我不知道這是否有什麼不同,但如果它有自己的怪癖,對我來說了解一下會非常有用。

+1

如果您曾經使用MySQL,請不要使用第一個版本:MySQL將忽略外鍵定義(即不會創建),但不會告訴您。 –

+0

@a_horse_with_no_name或不使用mysql;) –

+0

@NeilMcGuigan:我完全同意;) –

回答

3

FOREIGN KEY語法比在列定義中內聯定義它更靈活(例如,它允許您定義組合外鍵,其中兩個或多個字段的組合應該存在於引用列中)。

在你的情況下,兩個DDL語句沒有區別。人們可以說外鍵的內聯定義不過是語法加糖。

+0

感謝您清除 –