मैं MySQL में एकाधिक कॉलम के लिए अद्वितीय बाधा निर्दिष्ट कैसे करूं?




unique-constraint composite-key (6)

MySQL 5 या उच्च इस तरह व्यवहार करते हैं (मैंने अभी परीक्षण किया है):

  • आप निरर्थक कॉलम को शामिल करने वाली अनूठी बाधाओं को परिभाषित कर सकते हैं। मान लें कि आप एक बाधा अद्वितीय (ए, बी) परिभाषित करते हैं जहां ए शून्य नहीं है लेकिन बी है
  • इस तरह की बाधा का मूल्यांकन करते समय आप (ए, नल) जितनी बार चाहें (उसी मूल्य!)
  • आप केवल एक (ए, नल बी) जोड़ी हो सकती है

उदाहरण: PRODUCT_NAME, PRODUCT_VERSION 'ग्लास', नल 'ग्लास', नल 'वाइन', 1

अब यदि आप डालने का प्रयास करते हैं ('वाइन' 1) फिर से यह एक बाधा उल्लंघन की रिपोर्ट करेगा उम्मीद है कि यह मदद करता है

मेरे पास एक टेबल है:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

अब मैं कॉलम उपयोगकर्ता, ईमेल, पता अद्वितीय (एक साथ) बनाना चाहता हूं।

मैं इसे MySQL में कैसे करूं?

  • बेशक उदाहरण सिर्फ एक उदाहरण है। तो कृपया अर्थशास्त्र के बारे में चिंता मत करो।

आप phpMyAdmin के माध्यम से एकाधिक-कॉलम अद्वितीय अनुक्रमणिका जोड़ सकते हैं। (मैंने संस्करण 4.0.4 में परीक्षण किया)

अपनी लक्ष्य तालिका के लिए संरचना पृष्ठ पर नेविगेट करें। कॉलम में से एक में एक अनन्य अनुक्रमणिका जोड़ें। आपके द्वारा अभी जोड़े गए अद्वितीय इंडेक्स को देखने के लिए संरचना पृष्ठ के नीचे इंडेक्स सूची का विस्तार करें। संपादन आइकन पर क्लिक करें, और निम्न संवाद में आप उस अद्वितीय अनुक्रमणिका में अतिरिक्त कॉलम जोड़ सकते हैं।


निम्नलिखित अद्वितीय इंडेक्स जोड़ने के लिए आवश्यक हैं:

1) table_name
2) index_name
3) कॉलम जिस पर आप इंडेक्स जोड़ना चाहते हैं

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

आपके मामले में हम अद्वितीय इंडेक्स निम्नानुसार बना सकते हैं:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

मल्टी कॉलम अद्वितीय इंडेक्स MySQL में काम नहीं करते हैं यदि आपके पास पंक्ति में नल मान है क्योंकि MySQL NULL को एक अद्वितीय मान के रूप में मानता है और कम से कम वर्तमान में मल्टी-कॉलम इंडेक्स में इसके आसपास काम करने के लिए कोई तर्क नहीं है। हां व्यवहार पागल है, क्योंकि यह मल्टी-कॉलम इंडेक्स के बहुत से वैध अनुप्रयोगों को सीमित करता है, लेकिन यह वही है ... अभी तक, यह एक बग है जिसे MySQL पर "ठीक नहीं किया जाएगा" के साथ मुद्रित किया गया है बग ट्रैक ...


यदि आप भविष्य में डुप्लीकेट से बचना चाहते हैं। आईडी 2 कहें एक और कॉलम बनाएं।

UPDATE tablename SET id2 = id;

अब दो कॉलम पर अद्वितीय जोड़ें:

alter table tablename add unique index(columnname, id2);

यह mysql संस्करण 5.5.32 के लिए काम करता है

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);






database-table