আমি এই নির্দেশাবলীটি একটি বিদ্যমান নন-ইনক্রিমেন্ট প্রাথমিক কী সহ একটি টেবিলটি গ্রহণ করতে সক্ষম হয়েছি এবং টেবিলটিতে একটি বাড়ানো প্রাথমিক কী যুক্ত করেছি এবং নিম্নলিখিতটি ব্যবহার করে একটি নতুন যৌগিক প্রাথমিক কী হিসাবে পুরানো এবং নতুন কীগুলির সাথে একটি নতুন যৌগিক প্রাথমিক কী তৈরি করব কোড:
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
কীটি সহজেই যুক্ত করতে পারেন তবে মাইএসকিউএলগুলি ক্ষেত্রগুলির জন্য ইতিমধ্যে আইডি জেনারেট করে না। আপনাকে বিদ্যমান ক্ষেত্রগুলিকে ম্যানুয়ালি আপডেট করতে হবে এবং তারপরে আপনার নতুন অটো_সংশোধনটি ডান অফসেটে শুরু হবে তা নিশ্চিত করতে হবে - এটি '1' এর ডিফল্ট এবং আপনি যেভাবেই ডুপ্লিকেট কী ত্রুটিগুলি দিয়ে শেষ করতে চান।