MySQL - एक मौजूदा फील्ड यूनिक बनाएं


155

मेरे पास एक फ़ील्ड के साथ पहले से मौजूद तालिका है जो अद्वितीय होनी चाहिए, लेकिन नहीं है। मुझे केवल यह पता है क्योंकि एक तालिका में एक प्रविष्टि बनाई गई थी जिसका मूल्य दूसरे के समान था, पहले से मौजूद, प्रविष्टि और इसके कारण समस्याएं थीं।

मैं इस फ़ील्ड को केवल अनन्य मान कैसे बनाऊँ?

जवाबों:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4 या बाद के लिए:

ALTER TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4 के अनुसार, ALTER TABLE के लिए IGNORE क्लॉज को हटा दिया जाता है और इसके उपयोग में त्रुटि उत्पन्न होती है।

इसलिए, पहले सुनिश्चित करें कि डुप्लिकेट प्रविष्टियों को हटा दें क्योंकि IGNORE कीवर्ड अब समर्थित नहीं है।

संदर्भ


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. डॉक्स
मिस्टर

1
क्या एक निश्चित मापदंड के आधार पर पंक्तियों को हटाने के लिए इसे बताने का कोई तरीका है? या ऐसा करने के लिए आपको कुछ पूर्वप्रक्रिया करने की आवश्यकता होगी ALTER
corsiKa

7
ALTER IGNOREअभी भी आपके डेटा की सुरक्षा के लिए MySQL संस्करण> 5.5 और InnoDB पर डुप्लिकेट त्रुटि दे सकता है। अगर आपको पूरा यकीन है कि डुप्लिकेट पंक्तियों में से पहला रखना सही बात है, तो कोशिश करें set session old_alter_table=1। इसे वापस सेट करने के लिए मत भूलना। mysqlolyk.wordpress.com/2012/02/18/…
michaelliu

2
5.6.7 या अधिक का उपयोग कर इस पर ठोकर खाने वाले किसी भी व्यक्ति के लिए, IGNORE अब समर्थित नहीं है। moredocs मुझे लगता है कि अब ऐसा करने का तरीका यह सुनिश्चित करना है कि आपके पास पहले डुप्लिकेट नहीं हैं, नहीं?
विलियम टी। मल्लार्ड

1
इस क्वेरी को चलाने से पहले तालिका की बैकअप प्रतिलिपि बनाना सुनिश्चित करें। यह पहले वाली को छोड़कर सभी पंक्तियों को हटा देगा यदि कॉलमनाम में समान मान हैं या रिक्त है।
स्थिर_दादी


16

यदि आप भी बाधा का नाम देना चाहते हैं, तो इसका उपयोग करें:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7

CREATE UNIQUE INDEX foo ON table_name (field_name)

आपको उस sql को निष्पादित करने से पहले उस कॉलम पर डुप्लिकेट मानों को निकालना होगा। उस कॉलम पर कोई भी मौजूदा डुप्लिकेट मान आपको mysql त्रुटि 1062 तक ले जाएगा


4

सबसे आसान और तेज़ तरीका phpmyadmin संरचना तालिका के साथ होगा।

उपयोग PHPMADMIN पैनल पैनल!

यह रूसी भाषा में है, लेकिन अंग्रेजी संस्करण में भी ऐसा ही होना चाहिए। बस यूनिक बटन पर क्लिक करें। इसके अलावा वहाँ से आप अपने कॉलम PRIMARY या DELETE बना सकते हैं।


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

सही उत्तर है

सम्मिलित भाग

INSERT IGNORE INTO mytable ....

1

यह कोड मौजूदा तालिका के लिए अद्वितीय कुंजी सेट करने के लिए हमारी समस्या को हल करने के लिए है

alter ignore table ioni_groups add unique (group_name);

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