মাইএসকিউএলে প্রাথমিক কী সরান


181

আমার কাছে নিম্নলিখিত টেবিল স্কিমা রয়েছে যা ব্যবহারকারীর_ গ্রাহকদের একটি লাইভ মাইএসকিউএল ডাটাবেসে অনুমতি নিয়ে ম্যাপ করে:

mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| id               | int(11) | NO   | PRI | NULL    | auto_increment |
| user_customer_id | int(11) | NO   | PRI | NULL    |                |
| permission_id    | int(11) | NO   | PRI | NULL    |                |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

আমি ব্যবহারকারীর_কাস্টমার_আইডি এবং অনুমতি_আইডির প্রাথমিক কীগুলি সরিয়ে এবং আইডির জন্য প্রাথমিক কীটি ধরে রাখতে চাই।

আমি যখন আদেশটি চালাচ্ছি:

alter table user_customer_permission drop primary key;

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

আমি কীভাবে একটি কলামের প্রাথমিক কী ড্রপ করতে পারি?

উত্তর:


285

কোনও সূচি ছাড়াই, স্বতঃসংশোধের কলামটি বজায় রাখা খুব ব্যয়বহুল হয়ে যায়, এজন্য MySQLএকটি সূচির বামতম অংশ হতে একটি স্বয়ংসোধক কলামের প্রয়োজন।

কীটি নামানোর আগে আপনার স্বয়ত্তর সংস্থান সম্পত্তি মুছে ফেলা উচিত:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

মনে রাখবেন যে আপনার কাছে এমন একটি সংমিশ্রণ রয়েছে PRIMARY KEYযা তিনটি কলামকে কভার করে এবং idএটি অনন্য হওয়ার গ্যারান্টিযুক্ত নয়।

এটি অনন্য হতে হবে, তাহলে আপনি এটি একটি হতে করতে পারেন PRIMARY KEYএবং AUTO_INCREMENTআবার

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;

এরপরে কি আমাকে আইডি কলামটি স্বয়ংক্রিয় সংযোজন প্রাথমিক কী হিসাবে পুনরুদ্ধার করতে হবে না? পরিবর্তিত টেবিল ব্যবহারকারী_ কাস্টমার_পরিমেশন প্রাথমিক কী (আইডি) যুক্ত করুন; টেবিলটি ব্যবহারকারীর_কাস্টমারের_পরিষ্কার পরিবর্তন আইডি আইডি আইটি ইন্টি (11) স্বয়ংক্রিয় সংযোজন;
মার্কব

@markb: আপনি যদি প্রাথমিক কী পুনরুদ্ধার করেন তবে আপনি অবশ্যই এটিকে আবার ফিরিয়ে দিতে পারেন AUTO_INCREMENT
কাসনসুই

এটি স্বতঃসিদ্ধকরণ কলামটি মূল কী এর বামতম অংশ হতে বোঝায় ?
অরূপ রক্ষিত

1
@ অরূপরক্ষিত: dev.mysql.com/doc/refman/5.6/en/… একটি InnoDB টেবিল সহ পদ্ধতিটি ব্যবহার করতে AUTO_INCREMENT, একটি AUTO_INCREMENTকলাম ai_colএকটি সূচকের অংশ হিসাবে এমনভাবে সংজ্ঞায়িত করা উচিত যে কোনও সূচীযুক্ত SELECT MAX(ai_col)অনুসন্ধানের সমতুল্য সম্পাদন করা সম্ভব সর্বাধিক কলাম মান পেতে টেবিলে। সাধারণত, কলামটি কিছু টেবিল সূচকের প্রথম কলাম তৈরি করে এটি অর্জন করা হয়।
কাসনসুই

এটি বলে যে প্রাথমিক সংজ্ঞা দেওয়া হয়নি। কেন এমন হয়? সুতরাং আমাকে প্রাথমিক কী নির্দিষ্ট না করে আইডি কলামটি মুছতে এবং আবার যুক্ত করতে হয়েছিল
mrbengi

121

এক লাইন:

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

আপনি স্বতঃবৃদ্ধিও হারাবেন না এবং এটিকে পুনরায় যুক্ত করতে হবে যার পার্শ্ব প্রতিক্রিয়া হতে পারে।


5
আমি মনে করি এই উত্তরটি শীর্ষে ভাসতে হবে কারণ এটি কেবল ক্ষেত্রের সংজ্ঞা পরিবর্তন করার প্রয়োজনকেই সরিয়ে দেয় না, এটি টেবিলের fk সীমাবদ্ধতাগুলির মাধ্যমেও পরিবর্তনের অনুমতি দেয় - সত্যই আমাকে সাহায্য করেছিল!
tomfumb

পারফেক্ট! আমার জন্য প্রাথমিক কী বাদ দেওয়ার কাজটি হয়নি, এমনকি আমি যদি স্বয়ংক্রিয় বৃদ্ধি থেকে মুক্তি পেতে ক্ষেত্রটি পরিবর্তন করি। তবে এই সমাধানটি ঠিক কাজ করে!
ব্যবহারকারী 2447161

14

আমি বিশ্বাস করি কাসনসুই আপনার সরাসরি প্রশ্নের উত্তর দিয়েছেন। কেবলমাত্র একটি পার্শ্ব নোট: সম্ভবত এটি আপনার অংশে কিছু বিশ্রী শব্দগুচ্ছ, তবে আপনি মনে করছেন যে আপনার প্রতিটি ক্ষেত্রের তিনটি প্রাথমিক কী রয়েছে। এই ক্ষেত্রে না হয়. সংজ্ঞা অনুসারে, আপনার কাছে কেবল একটি প্রাথমিক কী থাকতে পারে। আপনার এখানে যা আছে তা একটি প্রাথমিক কী যা তিনটি ক্ষেত্রের সমন্বিত। সুতরাং, আপনি "একটি কলামে প্রাথমিক কী বাদ দিতে পারবেন না"। আপনি প্রাথমিক কী বাদ দিতে পারেন, বা প্রাথমিক কী বাদ দিতে পারেন না। আপনি যদি একটি প্রাথমিক কী চান যা কেবলমাত্র একটি কলাম অন্তর্ভুক্ত করে, আপনি 3 টি কলামে বিদ্যমান প্রাথমিক কীটি ফেলে দিতে এবং 1 কলামে একটি নতুন প্রাথমিক কী তৈরি করতে পারেন।




5

"আপনি যদি প্রাথমিক কী পুনরুদ্ধার করেন তবে আপনি অবশ্যই এটি পুনরায় AUTO_INCREMENT এ ফিরিয়ে দিতে পারেন"

আইডি কলামের "পিকে সম্পত্তি পুনরুদ্ধার" এবং "স্বয়ংসোধক সম্পত্তি পুনরুদ্ধার" বাঞ্ছনীয় কিনা তা নিয়ে কোনও প্রশ্নই আসে না।

এটি প্রদত্ত যে টেবিলের পূর্ব সংজ্ঞাটিতে এটি একটি স্বতঃসংশোধন ছিল, এটি সম্ভবত সম্ভবত এমন কোনও প্রোগ্রাম রয়েছে যা এই সারণিতে আইডি মান সরবরাহ না করে সন্নিবেশ করায় (কারণ আইডি কলামটি যাইহোক স্বতঃআগ্রহ হয়)।

স্বতঃআগ্রহ সম্পত্তি পুনরুদ্ধার না করে এই জাতীয় কোনও প্রোগ্রামের ক্রিয়াকলাপ ভেঙে যাবে।


3

প্রথমে এর মতো অটো_সংশোধন ক্ষেত্রটি সরাতে কলামটি পরিবর্তন করুন: টেবিলের ব্যবহারকারী_কাস্টমারের_পরিবর্তন কলাম আইডি সংশোধন করুন;

এরপরে, প্রাথমিক কীটি ফেলে দিন। টেবিলটি ব্যবহারকারীর_কাস্টমার_পরিমেশন ড্রপ প্রাথমিক কী পরিবর্তন করুন;



1

আমার টেবিলের ভিতরেও আমার একই সমস্যা ছিল এবং কিছু মান রয়েছে। যদিও আমি আমার প্রাথমিক কীটি দিয়ে এতে পরিবর্তন করেছি

ALTER TABLEব্যবহারকারী_ কাস্টমার_পরিমেশন DROP PRIMARY KEY , ADD PRIMARY KEY (আইডি)

আমার সার্ভারে সমস্যা অব্যাহত রয়েছে। আমি টেবিলের অভ্যন্তরে নতুন ক্ষেত্র তৈরি করেছি আমি মানগুলিকে নতুন ক্ষেত্রে স্থানান্তর করেছি এবং পুরানোটি মুছে ফেলেছি, সমস্যার সমাধান হয়েছে !!


1

কলামে প্রাথমিক কী যুক্ত করতে ।

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

টেবিল থেকে প্রাথমিক কী অপসারণ করতে ।

ALTER TABLE table_name DROP PRIMARY KEY;

0

প্রথম ডাটাবেস ব্যাকআপ। তারপরে টেবিলের সাথে সম্পর্কিত যে কোনও বিদেশী কী বাদ দিন। বিদেশী কী টেবিলটি কেটে ফেলুন the বর্তমান সারণীটি ছড়িয়ে দিন। প্রয়োজনীয় প্রাথমিক কীগুলি সরান। স্ক্লিয়োগ বা ওয়ার্কবেঞ্চ বা হাইডিস্কল বা ডিবিভার বা পিপিপিএইডমিন ব্যবহার করুন।


0

এসকিউএল পরিচালকের টেবিলটি সন্ধান করুন ডানদিকে এটি ক্লিক করুন এবং নকশা নির্বাচন করুন, তারপরে সামান্য কী আইকনে ডান ক্লিক করুন এবং প্রাথমিক কী সরান নির্বাচন করুন।


স্ক্রিনশট সহ এই পোস্টটি সমস্যার সমাধান করতে পারে, যদিও সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা সম্ভবত আপনি যে ইউআইটি খুঁজছেন তা জানেন না।
পাইরেট এক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.