SQLITE में 1 से अधिक कॉलम पर प्राथमिक कुंजी निर्दिष्ट करने के लिए वाक्यविन्यास क्या है?
SQLITE में 1 से अधिक कॉलम पर प्राथमिक कुंजी निर्दिष्ट करने के लिए वाक्यविन्यास क्या है?
जवाबों:
के मुताबिक प्रलेखन के , यह है
CREATE TABLE something (
column1,
column2,
column3,
PRIMARY KEY (column1, column2)
);
CREATE TABLE something (
column1 INTEGER NOT NULL,
column2 INTEGER NOT NULL,
value,
PRIMARY KEY ( column1, column2)
);
NULL
प्राथमिक कुंजियों में अनुमति दी गई है। यह उत्तर इस बात पर जोर देता है कि यदि आप अधिक मानक व्यवहार चाहते हैं, तो आपको स्वयं को जोड़ने की आवश्यकता है NOT NULL
। मेरा उत्तर एक बहु-कॉलम प्राथमिक कुंजी के लिए बस बहुत ही मूल वाक्यविन्यास है।
हाँ। लेकिन याद रखें कि ऐसी प्राथमिक कुंजी 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
NULL
?
मूल:
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
);
प्राथमिक कुंजी फ़ील्ड को शून्य के रूप में घोषित किया जाना चाहिए (यह गैर मानक है क्योंकि प्राथमिक कुंजी की परिभाषा यह है कि यह अद्वितीय होना चाहिए और सुस्त नहीं होना चाहिए)। लेकिन नीचे किसी भी DBMS में सभी मल्टी-कॉलम प्राथमिक कुंजी के लिए एक अच्छा अभ्यास है।
create table foo
(
fooint integer not null
,foobar string not null
,fooval real
,primary key (fooint, foobar)
)
;
SQLite के संस्करण 3.8.2 के बाद से, स्पष्ट नॉट स्पेसिफिकेशंस के विकल्प के लिए "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
WITHOUT ROWID
इसके अतिरिक्त निहितार्थ हैं, और इसे NOT NULL
आपकी प्राथमिक कुंजी के आगे लिखने के विकल्प के रूप में उपयोग नहीं किया जाना चाहिए ।
दूसरे तरीके से, आप दो कॉलम प्राथमिक कुंजी unique
और ऑटो-इंक्रीमेंट कुंजी भी बना सकते हैंprimary
। बस इस तरह: https://stackoverflow.com/a/6157337
निम्न कोड SQLite में प्राथमिक कुंजी के रूप में 2 कॉलम के साथ एक तालिका बनाता है ।
समाधान:
CREATE TABLE IF NOT EXISTS users (id TEXT NOT NULL, name TEXT NOT NULL, pet_name TEXT, PRIMARY KEY (id, name))