একাধিক কলামে স্ক্লাইট প্রাথমিক কী


619

এসকিউএলটিতে 1 টিরও বেশি কলামে একটি প্রাথমিক কী নির্দিষ্ট করার জন্য সিনট্যাক্সটি কী?



6
@ ওয়ানওয়ার্ড বা সংমিশ্রিত কী, যদি কোনও কলাম নিজেই কী না থাকে।
মাইকেল 16

উত্তর:


805

ডকুমেন্টেশন অনুযায়ী , এটি

CREATE TABLE something (
  column1, 
  column2, 
  column3, 
  PRIMARY KEY (column1, column2)
);

3
ঠিক আছে, তবে ডকুমেন্টেশন অনুসারে টেবিলটি কিছু তৈরি করুন (কলাম 1 প্রাইমারি কী, কলাম 2 প্রাইমারি কী); পাশাপাশি সম্ভব হওয়া উচিত, তবে তা হয় না।
ইয়ার

6
@ ইয়ার দস্তাবেজগুলি বলছে "যদি একক ক্রিয়েট টেবিল বিবৃতিতে একাধিক প্রাথমিক কী অনুচ্ছেদে থাকে তবে এটি একটি ত্রুটি" " হ্যাঁ, রেলপথের চিত্রগুলি এটিকে বৈধ বলেও নির্দেশ করতে পারে তবে নীচের পাঠ্যটি স্পষ্ট করে যে এটি নেই।
ব্রায়ান ক্যাম্পবেল

10
যোগ করার জন্য মনে রাখুন প্রাথমিক কী (COLUMN1, COLUMN2) এই উত্তর মত শেষে অংশ। আপনি যদি কলাম 2 সংজ্ঞার পরে এটি যুক্ত করার চেষ্টা করেন আপনি একটি বাক্য গঠন ত্রুটি পাবেন
ওয়াওয়াহোস্ট

159
CREATE TABLE something (
  column1 INTEGER NOT NULL,
  column2 INTEGER NOT NULL,
  value,
  PRIMARY KEY ( column1, column2)
);

প্রাইমারি কী একটি নল চাপায় না?
প্রটন্নাল

23
@ প্ররত্নাল স্ট্যান্ডার্ড এসকিউএল এ, হ্যাঁ। এসকিউএলাইটে, NULLপ্রাথমিক কীগুলিতে অনুমোদিত। এই উত্তরটি জোর দেয় যে আপনি যদি আরও মানক আচরণ চান তবে আপনার NOT NULLনিজের যোগ করা দরকার । আমার উত্তরটি একাধিক-কলাম প্রাথমিক কী এর জন্য খুব প্রাথমিক বাক্য গঠন।
ব্রায়ান ক্যাম্পবেল

42

হ্যাঁ. তবে মনে রাখবেন যে এ জাতীয় প্রাথমিক কীটি 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?
পাসটাফেরাননিস্ট

4
@ পাস্তফেরিয়ানবাদী স্ক্লাইট.আর.এলং_আরএফ_ক্রিয়াটেটেবল এইচটিটিএমএল - "এসকিউএল স্ট্যান্ডার্ড অনুসারে, প্রাথমিক কী সবসময় ন্যূনাকে বোঝানো উচিত না। দুর্ভাগ্যক্রমে, কিছু প্রাথমিক সংস্করণে বাগের কারণে এসকিউএলাইটে এটি হয় না। [...] নুল মানগুলি অন্যান্য NULL সহ অন্যান্য মান থেকে পৃথক হিসাবে বিবেচিত হয়। "
অবিশ্বাস্য জানুয়ারী

হ্যাঁ, এসকিউএল নূলে সর্বদা মিথ্যা তুলনা করা হয়। এ কারণে, সম্পর্কিত তত্ত্বটি বিশেষত কোনও মূল উপাদানগুলির মান হিসাবে NULL বাদ দেয়। এসকিউএলাইট অবশ্য আপেক্ষিক অনুশীলন। দেখে মনে হচ্ছে লেখকগণ একাধিক কিন্তু "সমান" কীগুলিকে ব্যবহারিকভাবে মঞ্জুর করার পছন্দ করেছেন। স্পষ্টতই NULLs কে মূল মান হিসাবে না নেওয়াই ভাল।
হোল্ডেনওয়েব

31

বেসিক:

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
);

14

প্রাথমিক কী ক্ষেত্রগুলি নাল হিসাবে ঘোষণা করা উচিত (এটি একটি প্রাথমিক কী এর সংজ্ঞা হিসাবে এটি মান নয় এটি অবশ্যই অনন্য হওয়া উচিত এবং নাল নয়)। তবে নীচে কোনও ডিবিএমএসের সমস্ত মাল্টি-কলাম প্রাথমিক কীগুলির জন্য একটি ভাল অনুশীলন is

create table foo
(
  fooint integer not null
  ,foobar string not null
  ,fooval real
  ,primary key (fooint, foobar)
)
;

11

এসকিউএলাইটের সংস্করণ ৩.৮.২, যেহেতু স্পষ্ট নয় নাল স্পেসিফিকেশনের বিকল্প হ'ল "বিনা পাতায়" স্পেসিফিকেশন: [ 1 ]

NOT NULL is enforced on every column of the PRIMARY KEY
in a WITHOUT ROWID table.

"বিনা উইথ রাউড" টেবিলগুলির সম্ভাব্য দক্ষতার সুবিধাগুলি রয়েছে, তাই বিবেচনা করার জন্য একটি কম ভার্বোস বিকল্প হ'ল:

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আপনার প্রাথমিক কী এর পাশে লেখার বিকল্প হিসাবে ব্যবহার করা উচিত নয় ।
ছায়াছবির

2

অন্য উপায়ে, এছাড়াও আপনি করতে পারেন দুই কলামের প্রাথমিক কী unique এবং স্বয়ংক্রিয় বৃদ্ধি কী primary। ঠিক এটির মতো: https://stackoverflow.com/a/6157337


আমি ঠিক কি জন্য এটি খুঁজছিলাম ছিল। ধন্যবাদ!
স্বাধীন সি সি

2

PRIMARY KEY (id, name)আমার জন্য কাজ করেনি। সীমাবদ্ধতা যুক্ত করার পরিবর্তে কাজটি হয়েছিল।

CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))


1

নিম্নলিখিত কোডটি এসকিউএলাইটে প্রাথমিক কী হিসাবে 2 কলাম সহ একটি সারণী তৈরি করে ।

সমাধান:

CREATE TABLE IF NOT EXISTS users (id TEXT NOT NULL, name TEXT NOT NULL, pet_name TEXT, PRIMARY KEY (id, name))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.