जवाबों:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
मेरे पास एक MySQL टेबल है:
CREATE TABLE `content_html` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_box_elements` int(11) DEFAULT NULL,
`id_router` int(11) DEFAULT NULL,
`content` mediumtext COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);
और UNIQUE KEY अपेक्षा के अनुरूप काम करता है, यह id_box_elements और id_router की कई NULL पंक्तियों को अनुमति देता है।
मैं MySQL 5.1.42 चला रहा हूं, इसलिए शायद ऊपर चर्चा किए गए मुद्दे पर कुछ अपडेट था। सौभाग्य से यह काम करता है और उम्मीद है कि यह इस तरह से रहेगा।
यदि आप पंक्ति में NULL मान रखते हैं, तो बहु स्तंभ अनन्य अनुक्रमणिकाएँ MySQL में काम नहीं करती हैं क्योंकि MySQL NULL को एक अद्वितीय मान के रूप में मानता है और कम से कम वर्तमान में बहु-स्तंभ अनुक्रमणिकाओं में इसके चारों ओर काम करने के लिए कोई तर्क नहीं है। हां व्यवहार पागल है, क्योंकि यह मल्टी-कॉलम इंडेक्स के बहुत सारे वैध अनुप्रयोगों को सीमित करता है, लेकिन यह वही है जो ... अभी तक, यह एक बग है जिसे MySQL पर "ठीक नहीं होगा" के साथ मुहर लगा दिया गया है बग ट्रैक ...
ENGINE BDB
, और, 2) यह प्रलेखित व्यवहार है, हालांकि, IMHO, अतिप्रस्तावित दस्तावेज नहीं दिया गया है यह देखते हुए कि यह कितना आश्चर्यजनक / अप्रिय हो सकता है। चर्चा के लिए MySQL बग 25544 बग s.mysql.com/bug.php?id=25544 देखें ।
क्या आपने यह कोशिश की है?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` ( user
, email
, address
) `। मैं MYSQL संस्करण 5.5.24 का उपयोग कर रहा हूं यदि आप इसका उपयोग कर रहे हैं तो आप इसे PHPMYADMIN में भी सेट कर सकते हैं। मैं पीएमए के 3.5.1 संस्करण का उपयोग कर रहा हूं।
यह mysql वर्जन 5.5.32 के लिए काम करता है
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 या उच्चतर इस तरह का व्यवहार करता है (मैंने अभी परीक्षण किया है):
उदाहरण: PRODUCT_NAME, PRODUCT_VERSION 'ग्लास', अशक्त 'ग्लास', अशक्त 'शराब', 1
अब यदि आप ('वाइन' 1) को फिर से डालने की कोशिश करते हैं तो यह एक बाधा उल्लंघन की सूचना देगा आशा है कि यह मदद करता है
आप 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 में तालिका बना रहे हैं तो निम्न का उपयोग करें:
create table package_template_mapping (
mapping_id int(10) not null auto_increment ,
template_id int(10) NOT NULL ,
package_id int(10) NOT NULL ,
remark varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
पहले मौजूदा डुप्लिकेट से छुटकारा पाएं
delete a from votes as a, votes as b where a.id < b.id
and a.user <=> b.user and a.email <=> b.email
and a.address <=> b.address;
फिर अद्वितीय बाधा जोड़ें
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
के साथ बाधा की जाँच करें
SHOW CREATE TABLE votes;
ध्यान दें कि उपयोगकर्ता, ईमेल, पता अद्वितीय माना जाएगा, यदि उनमें से किसी का इसमें शून्य मूल्य है।
PostgreSQL के लिए ... यह इंडेक्स के साथ मेरे लिए काम नहीं करता था; इसने मुझे एक त्रुटि दी, इसलिए मैंने ऐसा किया:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL ने अपने नाम से अद्वितीय सूचकांक दिया। मुझे लगता है कि आप तालिका के लिए विकल्पों में सूचकांक का नाम बदल सकते हैं, अगर इसे बदलने की आवश्यकता है ...