मैं इन निर्देशों को एक मौजूदा गैर-वेतन वृद्धि प्राथमिक कुंजी के साथ तालिका लेने में सक्षम करने में सक्षम था , और तालिका में एक वृद्धिशील प्राथमिक कुंजी जोड़ सकता हूं और निम्नलिखित का उपयोग करके समग्र प्राथमिक कुंजी के रूप में पुरानी और नई कुंजी दोनों के साथ एक नई समग्र प्राथमिक कुंजी बना सकता हूं कोड:
DROP TABLE IF EXISTS SAKAI_USER_ID_MAP;
CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID VARCHAR (99) NOT NULL,
EID VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);
INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');
ALTER TABLE SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY ( _USER_ID, USER_ID );
जब यह किया जाता है, तो _USER_ID फ़ील्ड मौजूद होती है और आपके पास प्राथमिक कुंजी के लिए सभी नंबर मान होते हैं, जैसा कि आप अपेक्षा करते हैं। शीर्ष पर "डीआरओपी टेबल" के साथ, आप विविधताओं के साथ प्रयोग करने के लिए इसे बार-बार चला सकते हैं।
मैं जो काम नहीं कर पाया, वह ऐसी स्थिति है, जहां आने वाले फॉरेक्स कुंजी हैं जो पहले से ही USER_ID फ़ील्ड पर इंगित करते हैं। मुझे यह संदेश तब मिलता है जब मैं किसी अन्य तालिका से आने वाली विदेशी कुंजी के साथ अधिक जटिल उदाहरण करने की कोशिश करता हूं।
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
मैं अनुमान लगा रहा हूं कि मुझे ALTER टेबल करने से पहले सभी विदेशी चाबियों को फाड़ना होगा और फिर बाद में उन्हें फिर से बनाना होगा। लेकिन अभी के लिए मैं इस समाधान को मूल प्रश्न के अधिक चुनौतीपूर्ण संस्करण में साझा करना चाहता था, जब अन्य इस स्थिति में भाग गए थे।
alter table
से कुंजी को जोड़ने के लिए कर सकते हैं , लेकिन MySQL उन क्षेत्रों के लिए आईडी उत्पन्न नहीं करेगा जिनके पास पहले से नहीं है। आपको मौजूदा फ़ील्ड को मैन्युअल रूप से अपडेट करना होगा और फिर सुनिश्चित करें कि आपका नया auto_increment सही ऑफ़सेट पर शुरू होता है - यह '1' के लिए डिफॉल्ट करता है और आप किसी भी तरह डुप्लिकेट मुख्य त्रुटियों को समाप्त करेंगे।