2011-05-27 9 views
15

है मेरे पास तालिका में एकाधिक (समग्र) प्राथमिक कुंजी हैं और उनमें से एक ऑटो वृद्धि होगी। हालांकि, दिलचस्प रूप से SQLite कीवर्ड के बाद AUTOINCREMENT कीवर्ड का उपयोग करने की अनुमति देता है।तालिका में SQLite बहु-प्राथमिक कुंजी, उनमें से एक ऑटो वृद्धि

मेरे प्रश्न है:

CREATE TABLE ticket (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    seat TEXT, payment INTEGER, 
    PRIMARY KEY (id, seat)) 

हालांकि त्रुटि table "ticket" has more than one primary key है।

वास्तव में मैं इस तालिका के लिए अन्य प्राथमिक कुंजी से बच सकता हूं। लेकिन मैं एक ओआरएम ढांचे को कोडिंग कर रहा हूं (नरक हाँ मैं पागल हूं) और एक टेबल के लिए PRIMARY KEY बाधा पीढ़ी की संरचना को बदलना नहीं चाहता (क्योंकि इसे MySQL afaik में अनुमति है)।

क्या आप कोई समाधान जानते हैं?

+0

मुझे लगता है कि आप "केवल" "सिर्फ" के बाद के बजाय के बाद कहने के लिए मतलब था? – Michael

उत्तर

12

नहीं, मुझे नहीं लगता कि यह संभव है।

आप एक UNIQUE INDEX जो अनिवार्य रूप से एक प्राथमिक कुंजी के रूप में एक ही प्रभाव पड़ता है बना सकते हैं:

CREATE UNIQUE INDEX pk_index ON "table1"("field1","field2"); 

इसके अलावा, मैं अपने स्कीमा के तर्क को देखने के लिए असफल, वह है -> अगर किसी स्तंभ autoincrement है और आप मैन्युअल रूप से मूल्यों के साथ गड़बड़ करने का इरादा नहीं है, यह वैसे भी अद्वितीय होगा, इसलिए यह एक साधारण सरल लघु प्राथमिक कुंजी बनाता है। समग्र क्यों? हालांकि, कॉलम के संयोजन पर आपके पास एक और इंडेक्स बनाने के अच्छे कारण हो सकते हैं।

+0

मान लें कि मेरे पास एक टेबल पर एक प्राथमिक कुंजी है, क्या मुझे इस प्राथमिक कुंजी के लिए इंडेक्स जेनरेट करना चाहिए या क्या यह आंतरिक रूप से उत्पन्न होता है? –

+0

हां, कुंजी स्वचालित रूप से एक अनुक्रमणिका है। यह [लघु पाठ] देखें (http://developer.mimer.com/documentation/html_92/Mimer_SQL_Engine_DocSet/Basic_concepts4.html) ऐसा क्यों है। Autoincrement पर बिट के लिए – stefgosselin

+0

+1। दरअसल, अगर यह ऑटोइनक्रिकमेंट है, तो प्राथमिक कुंजी में इसके साथ एक और फ़ील्ड टैगिंग करने की आवश्यकता नहीं है। – MPelletier

18

UNIQUE INDEX अकेले PRIMARY KEY जैसा ही प्रभाव नहीं पड़ता है। एक अद्वितीय सूचकांक एक पूर्ण अनुमति देगा; एक प्राथमिक कुंजी बाधा नहीं होगी। आप उन बाधाओं को घोषित करने से बेहतर हैं।

CREATE TABLE ticket (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    seat TEXT NOT NULL, 
    payment INTEGER, 
    UNIQUE (id, seat)); 

आपको यह भी सोचना चाहिए कि आपको वास्तव में पूर्ण भुगतान स्वीकार करने की आवश्यकता है या नहीं।

+0

सबसे अच्छा समाधान मेरी समस्या हल किया –

0

आप भी इस तरह लिख सकते हैं:

CREATE TABLE ticket (
    id INTEGER PRIMARY, 
    seat TEXT, payment INTEGER, 
    PRIMARY KEY (id, seat)) 
+1

यह तकनीक काम नहीं किया और इसलिए मैंने इसे कम कर दिया है। –

+1

प्रश्न का उत्तर न दें, 'आईडी' फ़ील्ड स्वतः बढ़ी नहीं है –

संबंधित मुद्दे