বিদ্যমান সারণীতে স্বয়ংক্রিয় বৃদ্ধি প্রাথমিক কী Inোকান


157

আমি এমন একটি টেবিল পরিবর্তন করার চেষ্টা করছি যার কোনও প্রাথমিক কী বা স্বয়ংক্রিয় সংমুক্তি কলাম নেই। আমি কীভাবে একটি প্রাথমিক কী কলামটি যুক্ত করব তা আমি ভাবছিলাম কিন্তু প্রাথমিক কী কলামে স্বয়ংক্রিয়ভাবে ডেটা toোকানো সম্ভব কিনা তা আমি ভাবছিলাম (ইতিমধ্যে ডিবিতে আমার 500 টি সারি রয়েছে এবং তাদের আইডি দিতে চাই তবে আমি নিজে এটি করতে চাই না) । কোন চিন্তা? অনেক ধন্যবাদ.


2
আপনি alter tableকীটি সহজেই যুক্ত করতে পারেন তবে মাইএসকিউএলগুলি ক্ষেত্রগুলির জন্য ইতিমধ্যে আইডি জেনারেট করে না। আপনাকে বিদ্যমান ক্ষেত্রগুলিকে ম্যানুয়ালি আপডেট করতে হবে এবং তারপরে আপনার নতুন অটো_সংশোধনটি ডান অফসেটে শুরু হবে তা নিশ্চিত করতে হবে - এটি '1' এর ডিফল্ট এবং আপনি যেভাবেই ডুপ্লিকেট কী ত্রুটিগুলি দিয়ে শেষ করতে চান।
মারক বি

3
@ মার্কবি আমি কেবল পরীক্ষা করেছি এবং এটি আসলে 1 থেকে শুরু হওয়া সারিগুলির জন্য আইডিগুলি সন্নিবেশ
করিয়েছে

উত্তর:


253

কলামটি ALTER TABLEযুক্ত করা একটি বিবৃতি PRIMARY KEYআমার পরীক্ষায় সঠিকভাবে কাজ করে:

ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;

পরীক্ষার উদ্দেশ্যে তৈরি করা অস্থায়ী টেবিলে, উপরের বিবৃতিটি AUTO_INCREMENT idকলাম তৈরি করেছে এবং সারণীতে প্রতিটি বিদ্যমান সারির জন্য স্বয়ংক্রিয়-বর্ধিত মানগুলি 1 দিয়ে শুরু করে .োকানো হয়েছে।


1
হ্যাঁ, এটি আমার অভিজ্ঞতা হয়েছে। অটো_সংশোধন আইডিগুলি জনসাধারণের জন্য আলাদা স্ক্রিপ্ট চালানোর কথা কখনও মনে রাখবেন না ...
মাইক পার্সেল 21

1
লল ধন্যবাদ. আমার খারাপ আপনার জন্য সবুজ চিহ্ন যেহেতু আপনার তখন কার্যকর করা সহজ। : ডি
ফ্লাইংগ্যাট

53
এটির প্রথম কলামটি তৈরি করতে, FIRSTযেমনALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
ডেভিড থমাস

1
@ নিককি এসকিউএলাইট এর যান্ত্রিকতা একেবারেই আলাদা। আপনি পরামর্শ এখানে পাবেন stackoverflow.com/questions/946011/sqlite-add-primary-key
মাইকেল Berkowski

1
@ বিজয়শর্মা যদি আপনি অটো-ইনক্রিমেন্ট দিয়ে সারি তৈরি করেন এবং তা অবিলম্বে আইডি দ্বারা এটি পুনরুদ্ধার করতে পারেন তবে মাইএসকিউএল LAST_INSERT_ID()সেই মানটির জন্য SELECT * FROM table_name WHERE id = LAST_INSERT_ID()অফার করে এবং বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ এপিআইগুলি অ্যাপ্লিকেশন কোডটিতে সেই মানটি ফিরিয়ে দেওয়ার জন্য কিছু ফাংশন / পদ্ধতি সরবরাহ করে।
মাইকেল বার্কোভস্কি

51

ধরুন আপনার কাছে আইডি এর মতো অটো ইনক্রিমেন্টের জন্য কলাম নেই, না, তাহলে আপনি নিম্নলিখিত কোয়েরি ব্যবহার করে যুক্ত করতে পারেন:

ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

যদি আপনি কলাম করেন তবে নীচের ক্যোয়ারী ব্যবহার করে স্বয়ংক্রিয় বৃদ্ধিতে পরিবর্তন করুন:

 ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY

1
কি FIRSTশেষে করে?
ডেমেন্টিক

1
এটি idসর্বশেষের বিপরীতে নতুন কলামটিকে টেবিলের মধ্যে প্রথম করে দেবে, এটি ডিফল্ট আচরণ।
ফলমিনা

ভাল কাজ! ধন্যবাদ!
মাজেদুর রাহমান

4

হ্যাঁ, এটির মতো কিছু এটি করবে, সেরা নাও হতে পারে তবে আপনি ব্যাকআপ নিতে চান wan

$get_query = mysql_query("SELECT `any_field` FROM `your_table`");

$auto_increment_id = 1;

while($row = mysql_fetch_assoc($get_query))
{
  $update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'");
  $auto_increment_id++;
}

লক্ষ্য করুন যে any_fieldআপডেট করার সময় আপনি যেটি নির্বাচন করেছেন তা অবশ্যই একই হতে হবে।


4

আমার মতো যারা Multiple primary key definedত্রুটি পাচ্ছেন তাদের জন্য চেষ্টা করুন:

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL;

মাইএসকিউএল v5.5.31 এ এটি idকলামটি আমার জন্য প্রাথমিক কী হিসাবে সেট করেছে এবং প্রতিটি সারিকে একটি বর্ধনমূল্যের সাথে বিশিষ্ট করে ।


2

আমার কাছে সবচেয়ে সহজ এবং দ্রুত এটি হ'ল এটি

ALTER TABLE mydb.mytable 
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);

2

আমি এই নির্দেশাবলীটি একটি বিদ্যমান নন-ইনক্রিমেন্ট প্রাথমিক কী সহ একটি টেবিলটি গ্রহণ করতে সক্ষম হয়েছি এবং টেবিলটিতে একটি বাড়ানো প্রাথমিক কী যুক্ত করেছি এবং নিম্নলিখিতটি ব্যবহার করে একটি নতুন যৌগিক প্রাথমিক কী হিসাবে পুরানো এবং নতুন কীগুলির সাথে একটি নতুন যৌগিক প্রাথমিক কী তৈরি করব কোড:

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 টেবিলটি করার আগে আমাকে সমস্ত বিদেশী কী ছিন্ন করতে হবে এবং তারপরে সেগুলি পুনরায় তৈরি করতে হবে। তবে আপাতত আমি এই সমাধানটি অন্য প্রশ্নের মধ্যে দৌড়াদৌড়ি দেওয়ার ক্ষেত্রে মূল প্রশ্নের আরও চ্যালেঞ্জিং সংস্করণে ভাগ করে নিতে চেয়েছিলাম।


0

আপনার টেবিলটি রফতানি করুন, তারপরে আপনার টেবিলটি খালি করুন, তারপরে অনন্য INT হিসাবে ক্ষেত্রটি যুক্ত করুন, তারপরে এটি AUTO_INCREMENT এ পরিবর্তন করুন, তারপরে আপনি পূর্বে রফতানি করে নিজের টেবিলটি আবার আমদানি করুন।


0

আপনি বিদ্যমান সারণীতে একটি নতুন প্রাথমিক কী কলামটি যুক্ত করতে পারেন, কমান্ডটি ব্যবহার করে ক্রম সংখ্যা থাকতে পারে:

ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
ব্যবহারকারী 1717828

0

আমি একই সমস্যার মুখোমুখি হলাম তাই আমি কী কী প্রাথমিক কী এর জন্য ফিল্ডটি ফেলেছিলাম তা পরে আমি এটি পুনরায় তৈরি করেছিলাম এবং নিশ্চিত করেছিলাম যে এটি স্বয়ংক্রিয়ভাবে বৃদ্ধিযুক্ত। এটা আমার জন্য কাজ করেছে। আমি আশা করি এটি অন্যকে সহায়তা করে


0

ALTER টেবিল tablename সংশোধন tableNameID MEDIUMINT নাল AUTO_INCREMENT ;

এখানে tablename আপনার টেবিল নাম হয়,

টেবিলনামটি আপনার কলামের নাম যা প্রাথমিক তা সংশোধন করতে হবে

MEDIUMINT আপনার বিদ্যমান প্রাথমিক কীটির একটি ডেটা ধরণের

AUTO_INCREMENT তুমি কি নাল পর মাত্র auto_increment যোগ আছে

এটি সেই প্রাথমিক কীটি অটো_সৃজন তৈরি করবে ......

আশা করি এটি সহায়ক হবে :)


1
আপনি যদি সম্পাদনা করে কিছু ব্যাখ্যা যোগ করেন তবে এটি দরকারী হবে ।
শশাথ

-1

কীভাবে পিএইচপি লিখতে ইতিমধ্যে বিদ্যমান ক্ষেত্রটি (নাম, এই উদাহরণে) এটি একটি প্রাথমিক কী তৈরি করতে? ডাব্লু / ও, অবশ্যই টেবিলে কোনও অতিরিক্ত 'আইডি' ক্ষেত্র যুক্ত করে ..

এটি বর্তমানে তৈরি একটি সারণী - রেকর্ডের সংখ্যা পাওয়া গেছে: 4 টি নাম VARCHAR (20) YES জাতের VARCHAR (30) হ্যাঁ রঙ বর্ণাচার (20) হ্যাঁ ওজন ছোট (7) হ্যাঁ

এটি একটি শেষ ফলাফল (টেবিল বিবরণ) চেয়েছিল -

প্রাপ্ত রেকর্ডের সংখ্যা: ৪ টি নাম ভোচারার (২০) কোন প্রাইভ্রি প্রজাতির ভ্রচার (৩০) হ্যাঁ রঙ বর্ণাচার (২০) হ্যাঁ ওজন ছোট ()) হ্যাঁ

এটি পাওয়ার পরিবর্তে -

প্রাপ্ত রেকর্ডের সংখ্যা: 5 আইডি ইন্টি (11) কোনও পিআরআই নাম ভর্চার (20) হ্যাঁ জাতের ভর্চার (30) হ্যাঁ রঙ বর্ণাবার (20) হ্যাঁ ওজন ছোট (7) হ্যাঁ

চেষ্টা করার পরে ..

$ ক্যোয়ারী = "অল্টার টেবিলে রেসহর্সগুলি প্রথম আইডি যুক্ত করুন না প্রথমে স্বীকৃতি না দেওয়া, প্রাথমিক কী (আইডি) যুক্ত করুন";

কিভাবে এটা পেতে হবে? -

প্রাপ্ত রেকর্ডের সংখ্যা: ৪ টি নাম ভোচারার (২০) কোন প্রাইভ্রি প্রজাতির ভোচারার (৩০) হ্যাঁ রঙ বর্ণাচার (২০) হ্যাঁ ওজন ছোট ()) হ্যাঁ

যেমন INSERT / ADD .. ইত্যাদি প্রাথমিক কীটি প্রথম ক্ষেত্রের রেকর্ডের মধ্যে (ডাব্লু / ও ও একটি অতিরিক্ত 'আইডি' ক্ষেত্র যুক্ত করে যা আগেই বলেছিল)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.