2012-06-06 22 views
56

किसी PRIMARY KEY, UNIQUE KEY और KEY के उद्देश्य के बारे व्याख्या कर सकते हैं अगर वे में एक भी CREATE TABLE बयान में एक साथ डाल दिया बनाते समय माई एसक्यूएल ?MySQL - "प्राथमिक कुंजी", "अद्वितीय कुंजी" और "कुंजी" का अर्थ है जब एक साथ इस्तेमाल किया एक मेज

CREATE TABLE IF NOT EXISTS `tmp` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `uid` varchar(255) NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `tag` int(1) NOT NULL DEFAULT '0', 
    `description` varchar(255), 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `uid` (`uid`), 
    KEY `name` (`name`), 
    KEY `tag` (`tag`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 ; 

मैं इस क्वेरी को MySQL में कैसे परिवर्तित करूं?

+3

संबंधित: [? MySQL के प्रमुख कीवर्ड] (http://stackoverflow.com/q/924265/697449) मूल रूप से '' KEY' INDEX' का पर्याय है। –

उत्तर

80

एक प्रमुख सिर्फ एक सामान्य सूचकांक है MSSQL करने के लिए mysql कन्वर्ट करने के लिए कर सकते हैं। सरलीकरण पर एक तरीका पुस्तकालय में कार्ड कैटलॉग की तरह सोचना है। यह MySQL को सही दिशा में इंगित करता है।

बेहतर खोज गति के लिए एक अनूठी कुंजी का भी उपयोग किया जाता है, लेकिन इसमें बाधा है कि कोई डुप्लिकेट आइटम नहीं हो सकता है (कोई दो x और y नहीं है जहां x y और x == y नहीं है)।

manual इस प्रकार यह बताते हैं:

एक अद्वितीय सूचकांक की कोई समस्या ऐसी है कि सूचकांक में सभी मान अंतर होना चाहिए बनाता है। एक त्रुटि तब होती है जब आप कुंजी मान के साथ कोई नई पंक्ति जोड़ने का प्रयास करते हैं जो मौजूदा पंक्ति से मेल खाता है। यह बाधा बीडीबी स्टोरेज इंजन को छोड़कर को नल मूल्यों पर लागू नहीं करती है। अन्य इंजनों के लिए, यूनिक इंडेक्स कॉलम के लिए एकाधिक NULL मानों को अनुमति देता है जिसमें NULL हो सकता है। यदि आप UNIQUE अनुक्रमणिका में किसी कॉलम के लिए उपसर्ग मान निर्दिष्ट करते हैं, कॉलम मान उपसर्ग के भीतर अद्वितीय होना चाहिए।

प्राथमिक कुंजी एक 'विशेष' अद्वितीय कुंजी है। यह मूल रूप से एक अनूठी कुंजी है, सिवाय इसके कि इसका उपयोग कुछ पहचानने के लिए किया जाता है।

मैनुअल बताता है कि सामान्य रूप से इंडेक्स का उपयोग कैसे किया जाता है: here

एमएसएसक्यूएल में, अवधारणाएं समान हैं। इंडेक्स, अद्वितीय बाधाएं और प्राथमिक कुंजी हैं।

untested है, लेकिन मेरा मानना ​​है कि MSSQL बराबर है:

CREATE TABLE tmp (
    id int NOT NULL PRIMARY KEY IDENTITY, 
    uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE, 
    name varchar(255) NOT NULL, 
    tag int NOT NULL DEFAULT 0, 
    description varchar(255), 
); 

CREATE INDEX idx_name ON tmp (name); 
CREATE INDEX idx_tag ON tmp (tag); 

संपादित करें: कोड के ऊपर सही होने के लिए परीक्षण किया जाता है; हालांकि, मुझे संदेह है कि ऐसा करने के लिए एक बेहतर वाक्यविन्यास है। थोड़ी देर के बाद से मैंने SQL सर्वर का उपयोग किया है, और स्पष्ट रूप से मैं काफी भूल गया हूँ :)।

+1

ग्रेट स्पष्टीकरण! कोड भी अच्छी तरह से काम कर रहा है। आपका बहुत बहुत धन्यवाद! – sura2k

+0

कोई समस्या नहीं है। मैं खुशी से मदद कर सकता है :)। – Corbin

+0

मैनुअल में सही जगह पर इंगित करने के लिए धन्यवाद! – ptpaterson

3

MySQL अद्वितीय और प्राथमिक कुंजी पंक्तियों की पहचान करने के लिए सेवा करते हैं। एक तालिका में केवल एक प्राथमिक कुंजी हो सकती है लेकिन एक या अधिक अनूठी कुंजी हो सकती है। कुंजी सिर्फ सूचकांक है।

अधिक जानकारी के लिए आप की जाँच http://www.geeksww.com/tutorials/database_management_systems/mysql/tips_and_tricks/mysql_primary_key_vs_unique_key_constraints.php

इस कोशिश करते हैं और देखते हैं http://gathadams.com/2008/02/07/convert-mysql-to-ms-sql-server/

+0

@ पॉल बेलोरा, आपकी व्याख्या मेरे मुकाबले ज्यादा स्पष्ट है। महान। – Wazan

+0

वैसे मैंने अभी दस्तावेज़ों को उद्धृत किया है, और मुझे कनवर्ट करने के बारे में दूसरा हिस्सा नहीं मिला। मुझे लगता है कि कॉर्बिन का जवाब इसे अच्छी तरह से बताता है। –

23

बस अन्य उत्तर में जोड़ने के लिए, documentation इस स्पष्टीकरण देता है:

  • KEY सामान्य रूप से INDEX के लिए एक पर्याय है। कॉलम परिभाषा में दिए जाने पर मुख्य विशेषता PRIMARY KEY को KEY के रूप में भी निर्दिष्ट किया जा सकता है।यह अन्य डेटाबेस सिस्टम के साथ संगतता के लिए लागू किया गया था।

  • UNIQUE इंडेक्स एक बाधा उत्पन्न करता है जैसे सूचकांक में सभी मान अलग-अलग होना चाहिए। एक त्रुटि तब होती है जब आप कुंजी मान के साथ कोई नई पंक्ति जोड़ने का प्रयास करते हैं जो मौजूदा पंक्ति से मेल खाता है। सभी इंजनों के लिए, UNIQUE इंडेक्स NULL वाले कॉलम के लिए एकाधिक NULL मानों को अनुमति देता है।

  • PRIMARY KEY एक अद्वितीय अनुक्रमणिका है जहां सभी प्रमुख कॉलम को NOT NULL के रूप में परिभाषित किया जाना चाहिए। अगर उन्हें स्पष्ट रूप से NOT NULL के रूप में घोषित नहीं किया गया है, तो MySQL उन्हें इतना स्पष्ट रूप से घोषित करता है (और चुपचाप)। एक तालिका में केवल एक PRIMARY KEY हो सकता है। PRIMARY KEY का नाम हमेशा PRIMARY है, जो इस प्रकार किसी अन्य प्रकार की अनुक्रमणिका के नाम के रूप में उपयोग नहीं किया जा सकता है।

+0

आप सभी को धन्यवाद! – sura2k

+0

अन्य डेटाबेस सिस्टम के साथ संगतता? अन्य डीबीएमएस किसी कुंजी के लिए "कुंजी" शब्द का उपयोग करता है जो कि एक कुंजी नहीं है (एक अनुक्रमणिका)? मैं हमेशा मानता था कि MySQL अजीबता का थोड़ा सा था - और यह कि MySQL के लेखकों को वास्तव में पता नहीं है कि एक कुंजी क्या है :) – sqlvogel