2012-07-18 24 views
35

मैं SQL12 दस्तावेज़ों से http://www.sqlite.org/foreignkeys.html पर निर्देशों का पालन कर रहा हूं हालांकि एक विदेशी कुंजी जोड़ने का मेरा प्रयास विफल रहा है। यहां मेरे निर्माण कथन हैं:SQLite विदेशी कुंजी

CREATE TABLE 
    checklist (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_title TEXT, 
     description TEXT, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 

CREATE TABLE 
    item (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     FOREIGN KEY(checklist_id) REFERENCES checklist(_id), 
     item_text TEXT, item_hint TEXT, 
     item_order INTEGER, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 

पहली तालिका ठीक हो गई है। त्रुटि दूसरे कथन में होती है। मैंने लेनदेन में और बिना दो प्रश्नों को लपेटने की कोशिश की है। जबकि संकलन,:

अज्ञात स्तंभ "checklist_id" विदेशी कुंजी परिभाषा (कोड 1) में: यहाँ त्रुटि है टेबल आइटम बनाने (_ id पूर्णांक प्राथमिक कुंजी autoincrement, विदेशी कुँजी (checklist_id) दें संदर्भ चेक लिस्ट (_ id), ITEM_TEXT पाठ , item_hint टेक्स्ट, item_order INTEGER, create_on INTEGER, संशोधित_ऑन INTEGER)

उत्तर

69

आपको इसे अभी भी विदेशी कुंजी के रूप में जोड़ने से पहले कॉलम बनाना होगा।

तो यह होगा:

CREATE TABLE 
    checklist (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_title TEXT, 
     description TEXT, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 

CREATE TABLE 
    item (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_id INTEGER, 
     item_text TEXT, 
     item_hint TEXT, 
     item_order INTEGER, 
     created_on INTEGER, 
     modified_on INTEGER, 
     FOREIGN KEY(checklist_id) REFERENCES checklist(_id) 
    ); 
+0

दोह के अंत में विदेशी कुंजी परिभाषा रखें! सभी को धन्यवाद! :-) –

+8

दरअसल इसमें एक समस्या थी ... सभी क्षेत्रों को परिभाषित करने के बाद बाधा आनी चाहिए। इसलिए विदेशी कुंजी लाइन संशोधित_ऑन के बाद होनी चाहिए। (अगर कोई इसे 201 9 में मदद के लिए देख रहा है। अतीत से हैलो!) –

+0

मैंने इसे ठीक किया। @GeeksOnHugs, आप अपने सवालों पर एक जवाब संपादित करने में सक्षम होना चाहिए। किसी को संपादन को मंजूरी देनी है, लेकिन भविष्य में अगर किसी के जवाब में कोई त्रुटि है तो आप इसे 201 9 में उन लोगों के लिए संपादित कर सकते हैं :) – Scen

4

आप स्तंभ नाम शामिल करने के लिए इससे पहले कि आप विदेशी कुंजी के साथ रैप() की जरूरत है।

CREATE TABLE 
    item (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     checklist_id INTEGER, 
     FOREIGN KEY(checklist_id) REFERENCES checklist(_id), 
     item_text TEXT, item_hint TEXT, 
     item_order INTEGER, 
     created_on INTEGER, 
     modified_on INTEGER 
    ); 
5

, बस आप अपने आइटम तालिका में checklist_id स्तंभ लापता हैं। इससे पहले कि आप इसे FOREIGN KEY के रूप में सेट करना चाहते हैं, आपको इसे घोषित करने की आवश्यकता है। आपने गैर-मौजूदा कॉलम पर FK बनाने का प्रयास किया है और यही कारण है कि यह काम नहीं करता है।

तो आप इस जोड़ने की जरूरत:

checklist_id INTEGER, 
FOREIGN KEY(checklist_id) REFERENCES checklist(_id) 

अब यह होना चाहिए काम करता है।