SQLITE में 1 से अधिक कॉलम पर प्राथमिक कुंजी निर्दिष्ट करने के लिए वाक्यविन्यास क्या है?एकाधिक कॉलम पर स्क्लाइट प्राथमिक कुंजी
उत्तर
documentation के अनुसार, यह
CREATE TABLE something (
column1,
column2,
column3,
PRIMARY KEY (column1, column2)
);
अच्छा, यह सही है, लेकिन प्रलेखन के अनुसार, तालिका कुछ बनाएं (कॉलम 1 प्राथमिक कुंजी, कॉलम 2 प्राथमिक कुंजी); भी संभव होना चाहिए, लेकिन यह नहीं है। – Yar
@Yar दस्तावेज़ कहते हैं, "यदि एक एकल तालिका तालिका में एक से अधिक प्राथमिक कुंजी खंड है, तो यह एक त्रुटि है।" हां, रेलरोड आरेख संकेत दे सकते हैं कि यह भी वैध है, लेकिन नीचे दिया गया पाठ स्पष्ट करता है कि यह नहीं है। –
इस उत्तर में * प्राथमिक कुंजी (कॉलम 1, कॉलम 2) * भाग को अंत में जोड़ने के लिए याद रखें। यदि आप कॉलम 2 परिभाषा के बाद इसे जोड़ने का प्रयास करते हैं तो आपको ** वाक्यविन्यास त्रुटि ** मिल जाएगी। – vovahost
हाँ है। लेकिन याद रखें कि ऐसी प्राथमिक कुंजी दोनों कॉलम में कई बार NULL
मानों को अनुमति देती है।
जैसे एक तालिका बनाएं:
sqlite> CREATE TABLE something (
column1, column2, value, PRIMARY KEY (column1, column2));
अब इस बिना किसी चेतावनी के काम करता है:
sqlite> insert into something (value) VALUES ('bla-bla');
sqlite> insert into something (value) VALUES ('bla-bla');
sqlite> select * from something;
NULL|NULL|bla-bla
NULL|NULL|bla-bla
क्या इस तरह के व्यवहार के कारण का कोई संदर्भ है? डेटाबेस में कई पंक्तियों को डंप करने का एक अच्छा तरीका क्या होगा और फिर भी डुप्लिकेट हटा दें, भले ही उनमें 'न्यूल' हो? – Pastafarianist
@Pastafarianist http://www.sqlite.org/lang_createtable.html - "एसक्यूएल मानक के अनुसार, प्राथमिक कुंजी हमेशा पूर्ण नहीं होना चाहिए।दुर्भाग्य से, कुछ प्रारंभिक संस्करणों में एक बग के कारण, यह SQLite में नहीं है। [...] अन्य मूल्यों को अन्य सभी मूल्यों से अलग माना जाता है, जिनमें अन्य एनयूएलएल शामिल हैं। " –
हां, एसक्यूएल एनयूएलएल में हमेशा झूठी तुलना की जाती है। इसके कारण, संबंध सिद्धांत विशेष रूप से किसी भी प्रमुख घटक के मूल्य के रूप में NULL को शामिल नहीं करता है। SQLite, हालांकि , व्यावहारिक अभ्यास है। ऐसा लगता है कि लेखकों ने व्यावहारिक रूप से कई को "बराबर" कुंजी की अनुमति नहीं दी है। स्पष्ट रूप से यह बेहतर है कि एनयूएलएल को महत्वपूर्ण मानों के रूप में अनुमति न दें। – holdenweb
CREATE TABLE something (
column1 INTEGER NOT NULL,
column2 INTEGER NOT NULL,
value,
PRIMARY KEY (column1, column2)
);
क्या प्राथमिक कुंजी एक पूर्ण नल लागू नहीं करती है? – pratnala
@pratnala मानक SQL में , हां। SQLite में, प्राथमिक कुंजी में 'NULL' की अनुमति है। यह उत्तर जोर देता है कि यदि आप अधिक मानक व्यवहार चाहते हैं, तो आपको' नल नल 'स्वयं जोड़ना होगा। मेरा उत्तर बहु-कॉलम के लिए बहुत ही बुनियादी वाक्यविन्यास है प्राथमिक कुंजी। –
प्राथमिक कुंजी फ़ील्ड रिक्त नहीं के रूप में घोषित किया जाना चाहिए (इस रूप में गैर मानक है प्राथमिक कुंजी की परिभाषा यह है कि यह अद्वितीय होना चाहिए और शून्य नहीं होना चाहिए)। लेकिन नीचे किसी भी डीबीएमएस में सभी बहु-स्तंभ प्राथमिक कुंजी के लिए एक अच्छा अभ्यास है।
create table foo
(
fooint integer not null
,foobar string not null
,fooval real
,primary key (fooint, foobar)
)
;
SQLite के संस्करण 3.8.2 के बाद से, स्पष्ट नहीं NULL विनिर्देशों के लिए एक विकल्प "बिना ROWID" विनिर्देश है: [1]
NOT NULL is enforced on every column of the PRIMARY KEY
in a WITHOUT ROWID table.
"बिना ROWID" टेबल संभावित क्षमता फायदे हैं, तो एक कम वर्बोज़ विकल्प पर विचार करना है:
CREATE TABLE t (
c1,
c2,
c3,
PRIMARY KEY (c1, c2)
) WITHOUT ROWID;
उदाहरण के लिए, sqlite3 प्रॉम्प्ट पर: sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2
बेसिक:
CREATE TABLE table1 (
columnA INTEGER NOT NULL,
columnB INTEGER NOT NULL,
PRIMARY KEY (columnA, columnB)
);
अपने कॉलम अन्य तालिकाओं के विदेशी कुंजी (सामान्य मामले) कर रहे हैं:
CREATE TABLE table1 (
table2_id INTEGER NOT NULL,
table3_id INTEGER NOT NULL,
FOREIGN KEY (table2_id) REFERENCES table2(id),
FOREIGN KEY (table3_id) REFERENCES table3(id),
PRIMARY KEY (table2_id, table3_id)
);
CREATE TABLE table2 (
id INTEGER NOT NULL,
PRIMARY KEY id
);
CREATE TABLE table3 (
id INTEGER NOT NULL,
PRIMARY KEY id
);
एक और तरीका है, आप यह भी दो स्तंभ प्राथमिक कुंजी बना सकते हैंunique
और ऑटो-वृद्धि कुंजी primary
। बस इस तरह: https://stackoverflow.com/a/6157337
- 1. मल्टी-कॉलम प्राथमिक कुंजी
- 2. ScalaQuery एकाधिक प्राथमिक कुंजी और विदेशी कुंजी
- 3. डुप्लिकेट कुंजी अपडेट पर - एकाधिक कॉलम
- 4. एसक्यूएल: प्राथमिक कुंजी कॉलम। कृत्रिम "आईडी" कॉलम बनाम "प्राकृतिक" कॉलम
- 5. प्राथमिक कुंजी
- 6. एंड्रॉइड स्क्लाइट में टेक्स्ट डेटाटाइप में प्राथमिक कुंजी कैसे जोड़ें?
- 7. grails में प्राथमिक कुंजी कॉलम कैसे बदलें?
- 8. SQLite प्राथमिक कुंजी जोड़ें
- 9. प्राथमिक कुंजी
- 10. MySQL मल्टीकॉलम प्राथमिक कुंजी
- 11. प्राथमिक कुंजी
- 12. PostgreSQL समग्र प्राथमिक कुंजी
- 13. RestKit प्राथमिक कुंजी विशेषता
- 14. मौजूदा समग्र प्राथमिक कुंजी
- 15. स्क्लाइट: टेबल और कॉलम पर टिप्पणियां जोड़ना?
- 16. प्राथमिक कुंजी
- 17. प्राथमिक कुंजी
- 18. प्राथमिक कुंजी छंटनी
- 19. कोई प्राथमिक कुंजी
- 20. प्राथमिक कुंजी
- 21. प्राथमिक कुंजी
- 22. कुंजी 'प्राथमिक'
- 23. एक समग्र प्राथमिक कुंजी
- 24. कोई प्राथमिक कुंजी
- 25. प्राथमिक कुंजी
- 26. प्राथमिक कुंजी
- 27. स्क्लाइट विदेशी कुंजी
- 28. प्राथमिक बदलें कुंजी
- 29. SQLAlchemy: यौगिक प्राथमिक कुंजी
- 30. एक समग्र प्राथमिक कुंजी
इसे कंपाउंड कुंजी भी कहा जाता है http://en.wikipedia.org/wiki/Compound_key – OneWorld
@OneWorld या समग्र कुंजी, यदि कोई भी स्तंभ स्वयं कुंजी नहीं है। – Michael