SQL Server 2008 में संयुक्त प्राथमिक कुंजी कैसे बनाएँ


178

मैं SQL Server 2008 में तालिकाएँ बनाना चाहता हूँ, लेकिन मुझे नहीं पता कि समग्र प्राथमिक कुंजी कैसे बनाई जाए। इसे कैसे प्राप्त किया जा सकता है?


1
जैसा कि आप asp.net के लिए नए हैं, सलाह का एक टुकड़ा: समग्र प्राथमिक कुंजी एक बुरी चीज है जो आमतौर पर खराब सोच-विचार का संकेत देती है
smirkingman

47
@smirkingman बहुत महत्वपूर्ण समस्याओं को हल किया जा सकता है, अक्सर विशेष रूप से समग्र प्राथमिक कुंजी के साथ। जैसे कि जब आपके पास सैकड़ों / हजारों उपयोगकर्ता हैं जो पंक्तियों को एकल तालिका / इकाई प्रकार में सहेजते हैं। आप उपयोगकर्ता-आईडी, फिर एक दूसरे मूल्य द्वारा आदेशित पंक्तियाँ चाहते हैं। आपका मूल्य निर्णय केवल गलत है, यदि नहीं, तो हम इस सुविधा को कुछ समय बाद ही हटा देंगे।
निकोलस पीटरसन

जवाबों:


243
create table my_table (
     column_a integer not null,
     column_b integer not null,
     column_c varchar(50),
     primary key (column_a, column_b)
);

2
का उपयोग करते हुए बीच diference क्या है प्राथमिक कुंजी और बाधा @ मैथ्यू-एबोट ने उदाहरण की तरह?
mateuscb

28
यह एक नामित बाधा बनाता है जिसे नाम से हटाया / अद्यतन किया जा सकता है
longhairedsi

14
बिल्कुल सच नहीं है। दोनों "नामित बाधाओं" का निर्माण करते हैं। यह सिर्फ इतना है कि पूर्व के साथ, आप नामकरण को नियंत्रित नहीं करते हैं। लेकिन एक बार बनाने के बाद, आप उस नाम को देख सकते हैं जिसका उपयोग किया गया था और नाम से हटा दें / अपडेट करें ...
Auspex

170
CREATE TABLE UserGroup
(
  [User_Id] INT NOT NULL,
  [Group_Id] INT NOT NULL

  CONSTRAINT PK_UserGroup PRIMARY KEY NONCLUSTERED ([User_Id], [Group_Id])
)

34
+1 - हां, अपने लोगों का नाम लिखें, अन्यथा Sql सर्वर एक रिलीज में DB और PK_UserGrou_3214EC0777FFCC69 की तरह PK_UserGrou_5DEAEAF5 नाम की तरह गंदा काम करता है। यह एक दर्द है यदि आपको पीके को अपडेट करने या छोड़ने की आवश्यकता है क्योंकि आपको पहले डीबी से नाम प्राप्त करना होगा और फिर डायनेमिक एसक्यूएल का उपयोग करना होगा (या पहले कोड में कमांड का निर्माण करना होगा)। इसके अलावा, यह बदसूरत है।
मोंटी

2
क्या कोई कारण है कि मैं नहीं चाहता कि मेरे पीके को क्लस्टर किया जाए?
04:00

1
@ 4AM यह आपके प्रश्न का उत्तर दे सकता है: लिंक
डोंगमिनेटर

52

वाया एंटरप्राइज मैनेजर (SSMS) ...

  • उस तालिका पर राइट क्लिक करें, जिस पर आप कंपोज़िट कुंजी बनाना चाहते हैं और डिज़ाइन का चयन करें ।
  • उन स्तंभों को हाइलाइट करें जिन्हें आप एक समग्र कुंजी के रूप में बनाना चाहते हैं
  • उन कॉलम पर राइट क्लिक करें और प्राथमिक कुंजी सेट करें

एसक्यूएल को देखने के लिए आप तो सही पर क्लिक कर सकते हैं Table> Script Table As>Create To


2
धन्यवाद। यह सबसे सुरक्षित / सबसे आसान तरीका संभवतः मेरी SQL सिंटैक्स अप खिलवाड़ के बिना है
AlbatrossCafe

1
यह उन लोगों के लिए आसान बनाता है जो डिजाइन / गाइड इंटरफेस के माध्यम से त्वरित सुधार चाहते हैं। सहायता के लिए धन्यवाद।
ट्रेवर नेस्टमैन

32

मुझे पता है कि मुझे इस पार्टी में देर हो रही है, लेकिन मौजूदा तालिका के लिए, कोशिश करें:

ALTER table TABLE_NAME
ADD CONSTRAINT [name of your PK, e.g. PK_TableName] PRIMARY KEY CLUSTERED (column1, column2, etc.)

27

MSSQL सर्वर 2012 के लिए

CREATE TABLE usrgroup(
  usr_id int FOREIGN KEY REFERENCES users(id),
  grp_id int FOREIGN KEY REFERENCES groups(id),

  PRIMARY KEY (usr_id, grp_id)
)

अपडेट करें

मुझे जोड़ना चाहिए!

यदि आप विदेशी / प्राथमिक कुंजियों को बदलना चाहते हैं, तो सबसे पहले आपको बाधाओं के साथ कुंजियाँ बनानी चाहिए या आप परिवर्तन नहीं कर सकते। इस तरह नीचे:

CREATE TABLE usrgroup(
  usr_id int,
  grp_id int,

  CONSTRAINT FK_usrgroup_usrid FOREIGN KEY (usr_id) REFERENCES users(id),
  CONSTRAINT FK_usrgroup_groupid FOREIGN KEY (grp_id) REFERENCES groups(id),

  CONSTRAINT PK_usrgroup PRIMARY KEY (usr_id,grp_id)
)

वास्तव में अंतिम रास्ता स्वास्थ्यप्रद और धारावाहिक है। आप FK / PK Constraint नाम (dbo.dbname> Keys> ..) देख सकते हैं, लेकिन यदि आप एक बाधा का उपयोग नहीं करते हैं, तो MSSQL ऑटो यादृच्छिक FK / PK नाम बनाता है। आपको हर परिवर्तन (परिवर्तन तालिका) पर ध्यान देने की आवश्यकता होगी।

मेरा सुझाव है कि आप अपने लिए एक मानक निर्धारित करें; बाधा को आपके मानक के अनुसार परिभाषित किया जाना चाहिए। आपको याद नहीं रखना पड़ेगा और आपको बहुत लंबा सोचना भी नहीं पड़ेगा। संक्षेप में, आप तेजी से काम करते हैं।


यह पीके नहीं बल्कि केवल FK बनाता है, नहीं?
बैटमसी

@batmaci; नहीं, यह पीके के लिए एफके और डबल एफके समूह दोनों है। यह प्रयोग स्वास्थ्यवर्धक है। मैं इसे सलाह देता हूं। जब आप PK नहीं बनाते हैं, तो आप भी उपयोग कर सकते हैं।
फातिह मर्ट डूनसन

1

पहले डेटाबेस और टेबल बनाएं, मैन्युअल रूप से कॉलम जोड़ते हुए। किस कॉलम में प्राथमिक कुंजी है। आपको इस कॉलम पर राइट क्लिक करना चाहिए और प्राथमिक कुंजी सेट करनी चाहिए और प्राथमिक कुंजी का बीज मान सेट करना चाहिए।



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.