Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql के लिए अद्वितीय पहचानकर्ता के रूप में एकाधिक कॉलम का प्रयोग करें

हाँ, MySQL ऐसा करने की क्षमता प्रदान करता है।

ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

मुझे नहीं पता कि आप इस तालिका का उपयोग किस लिए कर रहे हैं, लेकिन ऐसा लगता है कि यह अनूठी कुंजी तालिका की प्राथमिक कुंजी के लिए एक मजबूत उम्मीदवार हो सकती है। एक प्राथमिक कुंजी स्वचालित रूप से एक अद्वितीय कुंजी भी होती है। यदि आप इसे प्राथमिक कुंजी बनाने का निर्णय लेते हैं, तो इसके बजाय निम्न कार्य करें:

ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(यदि आपको एक त्रुटि संदेश प्राप्त होता है कि पहले से ही एक प्राथमिक कुंजी है, तो ALTER TABLE MyTable DROP PRIMARY KEY जारी करें और फिर उपरोक्त आदेश दोहराएं।)

संपादित करें: उपयोगकर्ता की टिप्पणी के जवाब में

आपके पास समान गैर-NULL . के साथ एकाधिक पंक्तियाँ नहीं हो सकतीं अद्वितीय कुंजी द्वारा कवर किए गए कॉलम के लिए मान। तो आपके पास दो पंक्तियाँ नहीं हो सकती हैं जहाँ group_id = 0 AND user_id = 5 , उदाहरण के लिए। 0 एक मान है। लेकिन यदि आप एक या दोनों स्तंभों को अशक्त बना देते हैं, तो आप कर सकते हैं कई पंक्तियाँ हैं जो NULL . की स्थिति तक समान हैं एस। तो आपके पास दो (या अधिक) पंक्तियाँ हो सकती हैं जहाँ group_id IS NULL AND user_id = 1234 है ।

प्रोविसो:उपरोक्त सामान्य रूप से उपयोग किए जाने वाले MySQL स्टोरेज इंजन (MyISAM और InnoDB) दोनों के लिए सही है। MySQL में स्टोरेज इंजन होते हैं जिनमें NULL एक अद्वितीय मूल्य के रूप में माना जाता है, लेकिन आप शायद उनका उपयोग नहीं कर रहे हैं।

यदि आप एक या दोनों स्तंभों को अशक्त बना देते हैं, तो आपकी अद्वितीय कुंजी प्राथमिक कुंजी नहीं हो सकती - प्राथमिक कुंजी उन स्तंभों पर होनी चाहिए जो NOT NULL हैं ।

मान लें कि आपने इस कुंजी को अपनी प्राथमिक कुंजी बना लिया है और अब आप NULL . को अनुमति देना चाहते हैं group_id . में कॉलम। मुझे नहीं पता कि कौन सा डेटाटाइप group_id है इस समय है; मुझे लगता है कि यह वर्तमान में है INT UNSIGNED NOT NULL , लेकिन यदि ऐसा नहीं है तो आपको नीचे संशोधित करना होगा। अब आप इस कुंजी को अपनी प्राथमिक कुंजी के रूप में उपयोग नहीं कर पाएंगे। यहां एक आदेश दिया गया है जिसे आप वांछित परिवर्तन करने के लिए चला सकते हैं:

ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RMySQL का उपयोग करके सक्रिय कनेक्शन बंद करना

  2. डेटाबेस कॉलम में एकाधिक आइटम कैसे स्टोर करें?

  3. धीमी स्थान आधारित खोज परिणाम क्वेरी

  4. क्या मैं सशर्त रूप से एक विशिष्टता बाधा लागू कर सकता हूं?

  5. mysql तैयार कथन त्रुटि:MySQLSyntaxErrorException