mysql - যবহ - ডেটাবেজের ভিত্তি কোনটি




কিভাবে MySQL এ AUTO_INCREMENT রিসেট করবেন? (15)

কিভাবে আমি একটি ক্ষেত্রের AUTO_INCREMENT পুনরায় সেট করতে পারেন? আমি এটা আবার থেকে গণনা শুরু করতে চান।


"অপারেশনস" ট্যাবের অধীনে phpmyadmin এর সাথে একটি খুব সহজ উপায় রয়েছে, আপনি টেবিল বিকল্পগুলিতে সেট করতে পারেন, আপনি যে নম্বরটি চান তার স্বয়ংসম্পূর্ণতা।


ALTER টেবিল Tablename AUTO_INCREMENT = 1


আপনি কেবল ক্রমটি পুনরায় সেট করতে টেবিলটি ছিনতাই করতে পারেন

TRUNCATE TABLE TABLE_NAME

আপনি সিনট্যাক্স TRUNCATE টেবিলটি TRUNCATE মতো ব্যবহার করতে পারেন: TRUNCATE TABLE table_name

সাবধান থাকুন !! TRUNCATE TABLE your_table your_table আপনার your_table সবকিছু your_table !!


আমি আপনাকে প্রশ্ন ব্রাউজারে যেতে এবং নিম্নলিখিত কাজ করার পরামর্শ দিচ্ছি:

  1. Schemata যান এবং আপনি পরিবর্তন করতে চান টেবিল খুঁজে।
  2. ডান ক্লিক করুন এবং কপি তৈরি বিবৃতি নির্বাচন করুন।
  3. একটি ফলাফল ট্যাব খুলুন এবং তাদের তৈরি বিবৃতি পেস্ট করুন।
  4. তৈরি বিবৃতির সর্বশেষ লাইনটিতে যান এবং Auto_Increment = N দেখুন, (যেখানে N স্বয়ংক্রিয়_ক্রিয়া ক্ষেত্রের জন্য বর্তমান নম্বর।)
  5. 1 দিয়ে এন প্রতিস্থাপন করুন।
  6. Ctrl + এন্টার চাপুন

একবার আপনি নতুন সারি int টেবিলে প্রবেশ করলে Auto_increment একটিকে পুনরায় সেট করা উচিত।

আমি যদি কোনও সারি যুক্ত করার চেষ্টা করি তবে কী হবে তা জানি না যেখানে auto_increment ক্ষেত্রের মান ইতিমধ্যে বিদ্যমান।

এই সাহায্য আশা করি!


আমি এই প্রশ্নটি খুঁজে পেয়েছিলাম এবং খুঁজে পেয়েছিলাম, কিন্তু উত্তরটি সত্যিই আমি দুইটি মানদণ্ড পূরণ করতে চাইছি:

  1. বিশুদ্ধরূপে MySQL প্রশ্ন ব্যবহার করে
  2. একটি বিদ্যমান টেবিল স্বয়ংক্রিয় বৃদ্ধি বৃদ্ধি (আইডি) + 1

যেহেতু আমি এখানে যা চাই তা সঠিকভাবে খুঁজে পাচ্ছি না, তাই আমি বিভিন্ন উত্তর থেকে উত্তরটি এবং এটি ভাগ করে নেব।

কিছু জিনিস নোট করুন:

  1. প্রশ্ন টেবিল InnoDB হয়
  2. টেবিলটি ক্ষেত্রের id প্রাথমিক কী হিসাবে int হিসাবে টাইপ করে
  3. MySQL এ বিশুদ্ধরূপে এটি করার একমাত্র উপায় সংরক্ষিত পদ্ধতি ব্যবহার করা হয়
  4. নীচের আমার ছবি GUI হিসাবে SequelPro ব্যবহার করা হয়। আপনি আপনার পছন্দসই MySQL এডিটর উপর ভিত্তি করে এটি মানিয়ে নিতে সক্ষম হওয়া উচিত
  5. আমি ডেবিয়ান-লিনাক্স-gnu এর জন্য MySQL Ver 14.14 Distrib 5.5.61 এ এটি পরীক্ষা করেছি

পদক্ষেপ 1: সংরক্ষিত পদ্ধতি তৈরি করুন

এই মত একটি সংরক্ষিত পদ্ধতি তৈরি করুন:

DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN

      SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
      PREPARE stmt FROM @get_next_inc; 
      EXECUTE stmt; 
      SELECT @next_inc AS result;
      DEALLOCATE PREPARE stmt; 

      set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
      PREPARE stmt FROM @alter_statement;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

তারপর এটা চালানো।

রান করার আগে, আপনি যখন আপনার ডেটাবেসে সংরক্ষিত পদ্ধতিগুলির অধীনে দেখেন তখন এটি এমন মনে হয়।

যখন আমি রান করি, আমি কেবল সংরক্ষিত পদ্ধতি নির্বাচন করে রান নির্বাচন নির্বাচন করি

দ্রষ্টব্য: delimiters অংশ অত্যন্ত গুরুত্বপূর্ণ। তাই যদি আপনি এই প্রশ্নের উপরের নির্বাচিত উত্তরগুলি থেকে অনুলিপি এবং পেস্ট করেন তবে তারা এই কারণে কাজ করতে পারে না।

আমি রান করার পরে, আমি সংরক্ষিত পদ্ধতি দেখতে হবে

আপনি সংরক্ষিত পদ্ধতি পরিবর্তন করতে হবে, আপনি সংরক্ষিত পদ্ধতি মুছে ফেলতে হবে, তারপর আবার চালানোর জন্য নির্বাচন করুন।

পদক্ষেপ 2: সংরক্ষিত পদ্ধতি কল

এই সময় আপনি কেবল সাধারণ MySQL প্রশ্ন ব্যবহার করতে পারেন।

call reset_autoincrement('products');

মূলত আমার নিজস্ব এসকিউএল ক্যোয়ারী থেকে https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc এবং স্ট্যাকঅভারফ্লোতে অভিযোজিত


এই প্রশ্নের সর্বাধিক রেট দেওয়া উত্তরগুলি "সমস্ত আপনার AUTO_INCREMENT = মান" বিকল্পটি সুপারিশ করে। যাইহোক, এটি শুধুমাত্র তখনই কাজ করে যখন পরিবর্তনের মান অটোক্রেকমেন্ট কলামের বর্তমান সর্বোচ্চ মানের চেয়ে বেশি। মাইএসকিউএল ডকুমেন্টেশন অনুযায়ী :

আপনি যে কাউকে ইতিমধ্যে ব্যবহার করা হয়েছে তার চেয়ে কম বা সমান মানের কাউন্টারটি পুনরায় সেট করতে পারবেন না। MyISAM এর জন্য, যদি মানটি বর্তমানে AUTO_INCREMENT কলামে সর্বাধিক মানের চেয়ে কম বা সমান হয় তবে মানটি বর্তমান সর্বাধিক প্লাস একটিকে পুনরায় সেট করা হয়। InnoDB এর জন্য, আপনি ALTER TABLE ব্যবহার করতে পারেন ... AUTO_INCREMENT = মান MySQL 5.0.3 হিসাবে মান, কিন্তু যদি মানটি কলামের বর্তমান সর্বাধিক মানের চেয়ে কম তবে কোনও ত্রুটি ঘটে না এবং বর্তমান ক্রম মান পরিবর্তিত হয় না।

মূলত, আপনি স্বয়ংক্রিয়ভাবে স্বতঃস্ফূর্তকরণ কলামের মান বাড়ানোর জন্য AUTO_INCREMENT পরিবর্তন করতে পারেন, এটি 1 টি পুনরায় সেট করবেন না, কারণ OP দ্বিতীয় প্রশ্নের মধ্যে জিজ্ঞাসা করে। এমন বিকল্পগুলির জন্য যা আপনাকে অটোস্ক্রীমেন্টকে তার বর্তমান সর্বোচ্চ থেকে নিম্নমানের সেট করার অনুমতি দেয়, পুনর্বিন্যাস / স্বয়ংক্রিয় বৃদ্ধি প্রাথমিক কী পুনরায় সেট করুন


একটি আপডেট যোগ করা হচ্ছে কারণ কার্যকারিতাটি মাইএসকিউএল 5.6 তে পরিবর্তিত হয়েছে। মাইএসকিউএল 5.6 হিসাবে আপনি InnoDB দিয়ে সহজ বিকল্প টেবিল ব্যবহার করতে পারেন:

ALTER TABLE tablename AUTO_INCREMENT = 1;

ডক্সগুলি এই প্রতিফলিত করার জন্য আপডেট করা হয়েছে:

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

আমার টেস্টিং এছাড়াও টেবিল কপি করা হয় না দেখায়, মান সহজভাবে পরিবর্তিত হয়।


এখানে আমার সমাধান, কিন্তু যদি আপনার কলামে সীমাবদ্ধতা থাকে বা অন্য টেবিলে বিদেশী কী হিসাবে সংযুক্ত থাকে তবে এটি করার জন্য আমি পরামর্শ দেব না কারণ এটি খারাপ প্রভাব ফেলবে বা এমনকি কাজ করবে না।

> প্রথম: কলাম ড্রপ

ALTER TABLE tbl_name DROP COLUMN column_id

> দ্বিতীয়: কলামটি পুনরায় তৈরি করুন এবং এটি প্রথম হিসাবে সেট করুন যদি আপনি এটি প্রথম কলাম হিসাবে অনুমান করেন।

ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST

এই ভাল কাজ করে!


এটা খালি টেবিলের জন্য:

ALTER TABLE `table_name` AUTO_INCREMENT = 1;

যদি আপনার ডেটা থাকে কিন্তু আপনি এটি পরিষ্কার করতে চান তবে আমি এটি ব্যবহার করার সুপারিশ করছি:

ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD  `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);


সর্বশেষ প্লাস এক আইডি আপডেট করুন

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);

ViralPatel দেওয়া ভাল বিকল্প আছে

উল্লেখ্য যে ALTER TABLE tablename AUTO_INCREMENT = value; InnoDB জন্য কাজ করে না


ALTER TABLE news_feed DROP id

ALTER TABLE news_feed ADD  id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)

আমি কিছু স্ক্রিপ্টে এটি ব্যবহার করেছি, আইডি ক্ষেত্রটি ড্রপ করা হয়েছে এবং তারপরে পূর্ববর্তী সেটিংস দিয়ে আবার যোগ করা হয়েছে, ডাটাবেস টেবিলে থাকা সমস্ত বিদ্যমান ক্ষেত্রগুলি নতুন স্বয়ংক্রিয় বৃদ্ধি মূল্যের সাথে ভরা হয়েছে, এটিও InnoDB এর সাথে কাজ করতে হবে।

মনে রাখবেন যে টেবিলে থাকা সমস্ত ক্ষেত্রগুলি পুনঃনির্দেশিত হবে এবং অন্য আইডগুলি থাকবে !!!


SET  @num := 0;

UPDATE your_table SET id = @num := (@num+1);

ALTER TABLE your_table AUTO_INCREMENT =1;

আমি এই এটা করতে হবে মনে হয়







auto-increment