2012-02-08 22 views
12

मेरे पास एक मूल 'उपयोगकर्ता' तालिका है जिसे मैं MySQL में बनाना चाहता हूं।अद्वितीय, अद्वितीय कुंजी और कन्स्ट्रेंट 'नाम' के बीच क्या अंतर है अद्वितीय?

मुझे डुप्लिकेट ईमेल या डेटाबेस में प्रदर्शित होने वाले उपयोगकर्ता नाम डुप्लिकेट नहीं करना चाहते हैं।

  • तालिका निर्माण पर इसे रोकने का सबसे अच्छा तरीका क्या है?
  • और निम्नलिखित के बीच अंतर क्या है:

1. अद्वितीय (उपयोगकर्ता नाम), अद्वितीय (ईमेल),

2. अद्वितीय कुंजी (उपयोगकर्ता नाम), अद्वितीय कुंजी (ईमेल),

3. कन्स्ट्रेंट ऑकन्स _login UNIQUE (उपयोगकर्ता नाम, ईमेल),

मुझे लगता है कि इनमें से कुछ समानार्थी हैं, फिर भी मैं ऑनलाइन विवादित जानकारी पढ़ रहा हूं और पुष्टि की मांग कर रहा हूं।

मुझे उम्मीद है कि कोई सहायता कर सकता है।

एसक्यूएल:

CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
username VARCHAR(30) NOT NULL, 
pass CHAR(40) NOT NULL, 
first_name VARCHAR(20) NOT NULL, 
last_name VARCHAR(40) NOT NULL, 
email VARCHAR(60) NOT NULL, 
registration_date DATETIME NOT NULL, 
user_level TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, 
active CHAR(32), 
PRIMARY KEY (user_id), 
UNIQUE (username), 
UNIQUE (email), 
INDEX login (email, pass), 
INDEX full_name (last_name, first_name) 
) ENGINE=INNODB; 
+0

ps: ईमेल के लिए सूचकांक, पास शायद ही चीजों को धीमा कर देगा। ईमेल पर अनूठी बाधा एक सामान्य इंडेक्स के रूप में भी काम कर सकती है। ईमेल पर चयन सबसे अधिक 1 पंक्ति पर वापस आ जाएगा, इसलिए पास पर इंडेक्स करने की कोई आवश्यकता नहीं है। –

उत्तर

14

1 और 2 आदर्श हैं ntical - दोनों दो अद्वितीय अनुक्रमणिका बनाते हैं, प्रत्येक कुंजी के लिए एक। # 3 केवल दोनों कुंजीों में एक अद्वितीय अनुक्रमणिका बनाता है, इसलिए उपयोगकर्ता नाम और ईमेल का कोई संयोजन डुप्लिकेट नहीं किया जा सकता है, लेकिन उदाहरण के लिए, एक उपयोगकर्ता नाम को तब तक डुप्लिकेट किया जा सकता है जब तक कि एक अलग ईमेल का उपयोग नहीं किया जाता।

लगता है जैसे आप पहले दो में से किसी एक को चाहते हैं। अद्वितीय और अद्वितीय कुंजी बराबर हैं।

+0

सही, जानकारी के लिए चीयर्स! – leokennedy

1

वे सभी पर्याय के रूप में syntax documentation इसका सबूत हैं:

[CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option]

इस अंकन (Wirth's notation) निरूपित में [] वैकल्पिक तत्वों

+2

तीसरा एक दो अलग-अलग कुंजियों के विपरीत, कई फ़ील्ड में एक जटिल कुंजी है। –

+0

दरअसल ... मैंने इस सवाल में ध्यान नहीं दिया। – Mchl

+1

लिंक के लिए धन्यवाद MySQL बनाएँ टेबल सिंटैक्स अब और अधिक समझने के लिए शुरू कर रहा है। – leokennedy

संबंधित मुद्दे