2010-04-23 10 views
150

मैं SQLite वेबसाइट पर इस पर वाक्यविन्यास "चार्ट" पा सकता हूं, लेकिन कोई उदाहरण नहीं है और मेरा कोड क्रैश हो रहा है। मेरे पास एक ही कॉलम पर अनन्य बाधाओं वाली अन्य सारणी हैं, लेकिन मैं दो स्तंभों पर तालिका में बाधा जोड़ना चाहता हूं। मेरे पास यही है जो SQLiteException संदेश "वाक्यविन्यास त्रुटि" के साथ उत्पन्न कर रहा है।SQLite तालिका बाधा - एकाधिक कॉलम पर अद्वितीय

CREATE TABLE name (column defs) 
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE 

मैं निम्नलिखित के आधार पर यह कर रहा हूँ:

table-constraint

स्पष्ट है कि, लिंक मैं प्रदान की पर दस्तावेजीकरण का कहना है कि CONTSTRAINT name मेरी बाधा परिभाषा से पहले आना चाहिए।

कुछ ऐसा जो समाधान का कारण बन सकता है वह यह है कि जो भी मेरे ब्रांडेड कॉलम परिभाषाओं का पालन करता है वह डीबगर शिकायत करता है।

अगर मैं डाल

...last_column_name last_col_datatype) CONSTRAINT ... 

त्रुटि है के पास "बाधा": सिंटेक्स त्रुटि

अगर मैं डाल

...last_column_name last_col_datatype) UNIQUE ... 

त्रुटि के पास "अद्वितीय" है: वाक्य रचना त्रुटि

+1

UNIQUE शुरू होने से पहले एक अल्पविराम गायब है .. – magid

उत्तर

305

स्तंभ परिभाषा अनुभाग के भीतर अद्वितीय घोषणा रखो:

CREATE TABLE name (column defs, UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE); 

कार्य उदाहरण:

CREATE TABLE a (i INT, j INT, UNIQUE(i, j) ON CONFLICT REPLACE); 
+0

वाह। मैं पूरी तरह से काम करने के लिए आपका सरल उदाहरण प्राप्त कर सकता था। एक और जटिल उदाहरण मेरे बट को लात मार रहा था। जब आप उनमें से एक दर्जन हो तो अतिरिक्त कोष्ठक ढूंढना मुश्किल है। मैं अंत में यह काम कर रहा है। संक्षिप्त उत्तर के लिए धन्यवाद। – Justin

+4

अच्छा जवाब +1। क्या यह वाक्यविन्यास बनाता है मुझे नियमित डालने विधि का उपयोग करने की अनुमति देता है, और SQLiteDatabase.CONFLICT_REPLACE ध्वज के साथ सम्मिलित नहीं करता है? –

+1

मैं 2 से अधिक कॉलम के साथ 'ऑन कॉन्फ्लिक्ट इग्नोर' (अभी तक प्रतिस्थापित नहीं किया गया है) का उपयोग कर रहा हूं, लेकिन मुझे यह अद्वितीय बाधा का सम्मान नहीं दिख रहा है, यह सिर्फ डुप्लीकेट जोड़ता है। – Michael

7

खैर, अपने वाक्य रचना लिंक आप शामिल मेल नहीं खाती है, जो निर्दिष्ट करता है:

CREATE TABLE name (column defs) 
    CONSTRAINT constraint_name -- This is new 
    UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE 
+0

मैंने शुरू में ऐसा किया ... काम नहीं किया। मैंने इसे फिर से कोशिश की ... अभी भी काम नहीं करता – Rich

+5

अयमान का जवाब है। । । –

+1

तालिका का नाम बनाएं (कॉलम defs, CONSTRAINT constraint_name - यह कॉन्फ़्लिक्ट प्रतिस्थापन पर नया अनन्य (col_name1, col_name2) है) – Afwas