2013-10-04 36 views
7

我希望有人能向我解釋SQL關鍵字的目的關鍵字引用參考在sqlite3的

CREATE TABLE wizards(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name TEXT, 
    age INTEGER 
, color TEXT); 

CREATE TABLE powers(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name STRING, 
    damage INTEGER, 
    wizard_id INTEGER REFERENCES wizards(id) 
); 

我花了很多時間試圖尋找這件事,我最初認爲,這將限制可以在powers表中輸入的數據類型(根據是否爲wizard_id)然而,我仍然可以在沒有任何約束的情況下將數據插入到兩列中,而我已經注意到了。

那麼,關鍵字REFERENCES只是爲了提高查詢速度嗎?它的真正目的是什麼?

感謝

回答

9

它創建一個Foreign Key到另一臺。這可以帶來性能優勢,但外鍵主要是關於數據完整性。這意味着(在你的情況下)wizard_id提交的powers必須有一個值存在於wizards表的id字段中。換句話說,權力必須引用一個有效的嚮導。許多數據庫也使用這些信息來傳播刪除或其他更改,以便表保持同步。

剛注意到這一點。您能夠繞過關鍵約束的原因可能是外鍵未啓用。請參閱SQLite3文檔中的Enabling foreign keys

+0

謝謝,這正是它是什麼。默認情況下不知道外鍵約束被關閉。 – JaTo

+0

如果這對你有效,不要忘記接受答案。 :) –

+0

完成,謝謝你的答案! – JaTo