স্বয়ংক্রিয় বৃদ্ধি শুরুর নম্বর পরিবর্তন করবেন?


263

মাইএসকিউএল-তে আমার একটি টেবিল রয়েছে এবং আমি এর পরিবর্তে auto_incrementমান সেট করতে চাই । এটি কি সম্ভব এবং কি ক্যোয়ারী বিবৃতি এটি করে?51


আপনি পরিবর্তন করতে পারবেন না, কেবল বৃদ্ধি করুন
ভাসিলি সুরিকভ

1
@ ভ্যাসিলিসূরিভ You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column. সোর্স যদি আপনি নিজের auto_incrementএড কলামটি সেট করতে চান তার চেয়ে উচ্চতর মান না থাকে তবে আপনি মানটি হ্রাস করতে পারেন। ( mysql ডকুমেন্টেশন )
sefahni

উত্তর:


519

আপনি ALTER TABLEঅটো_সংশোধন প্রাথমিক মান পরিবর্তন করতে ব্যবহার করতে পারেন :

ALTER TABLE tbl AUTO_INCREMENT = 5;

দেখুন মাইএসকিউএল রেফারেন্স আরো বিস্তারিত জানার জন্য।


6
যে কেউ জানেন কী একটি বিকল্প ছাড়া করা সম্ভব?
থিসমার্ট

3
হ্যাঁ এটা সম্ভব. আমার উত্তর দেখুন।
কোসিমো

3
মাইএসকিউএল 5.6 এ একটি ত্রুটি ছিল যা আপনাকে AUTO_INCREMENTমান হ্রাস করতে দেয় না , তবে এটি 5.6.16 এবং 5.7.4 এ স্থির করা হয়েছে, দেখুন bugs.mysql.com/bug.php?id=69882
ড্যানিয়েল ভান্ডারস্লুইস

3
আপনি যদি এটি করেন তবে টেবিলটি পুনর্নির্মাণ হচ্ছে সম্পর্কে কোসিমোর সতর্কতার দিকে একবার নজর দিন!
h00ligan

15
স্পষ্ট করার জন্য: প্রাথমিক মান 5 এ সেট করার অর্থ হ'ল পরবর্তী সন্নিবেশটি 5 হবে
স্টেইন শট

97

হ্যাঁ, আপনি ALTER TABLE t AUTO_INCREMENT = 42বিবৃতিটি ব্যবহার করতে পারেন । তবে আপনাকে সচেতন হওয়া দরকার যে এটি কমপক্ষে ইনোডিবি এবং নির্দিষ্ট মাইএসকিউএল সংস্করণ সহ আপনার পুরো টেবিলটির পুনর্নির্মাণের কারণ হবে। আপনার যদি লক্ষ লক্ষ সারি সহ ইতিমধ্যে বিদ্যমান ডেটাসেট থাকে তবে এটি সম্পূর্ণ হতে খুব দীর্ঘ সময় নিতে পারে

আমার অভিজ্ঞতায় নিম্নলিখিতগুলি করা আরও ভাল:

BEGIN WORK;
-- You may also need to add other mandatory columns and values
INSERT INTO t (id) VALUES (42);
ROLLBACK;

এইভাবে, আপনি লেনদেনটি পিছিয়ে দিলেও, মাইএসকিউএল স্বতঃবৃদ্ধি মান রাখবে এবং পরিবর্তনটি তাত্ক্ষণিকভাবে প্রয়োগ করা হবে be

আপনি একটি SHOW CREATE TABLE tবিবৃতি জারি করে এটি যাচাই করতে পারেন । তোমার দেখা উচিত:

> SHOW CREATE TABLE t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
...
) ENGINE=InnoDB AUTO_INCREMENT=43 ...

5
ধন্যবাদ! SET foreign_key_checks = 0;এই জন্য দরকারী।
dnozay

দারুণ বুদ্ধি! নিতপিক: SHOW CREATE TABLE tআসলে আসবে 43, অর্থাৎ প্রবেশের পরে পরবর্তী মান 42
পেট্রকোটেক

2
@cosimo, অপেক্ষা, এই নয় অনথিভুক্ত ? ম্যানুয়ালটি কি বলেছিল যে এটি সেইভাবে কাজ করা উচিত? তা না হলে এটি কোনও আলাদা (ভবিষ্যতের) মাইএসকিএল সেটআপে ভেঙে যেতে পারে।
পেসারিয়ার

1
@ পেসারিয়র হ্যাঁ, আপনি ঠিক বলেছেন। এটি বর্তমানে মাইএসকিউএল যেভাবে কাজ করে তার উপর নির্ভর করে। ভবিষ্যতে এটি এর মতো কাজ করবে না। যদিও মাইএসকিউএল ইতিহাস দেওয়া হয়েছে, আমি ধরে নেব এটি দীর্ঘদিন ধরে সেভাবে কাজ করে যাবে।
কোসিমো

@ কোসিমো, আশা করি তারা এটিকে নথিভুক্ত করবেন যাতে নির্ভরযোগ্য কোডটি আসলে এই ভাল হ্যাকটি ব্যবহার করতে পারে। এখন হিসাবে, নির্ভরযোগ্য হতে চায় এমন কোডটি এটি ব্যবহার করতে পারে না।
পেসারিয়ার

13

মাইএসকিউএল থেকে 10 এ শুরু করে কীভাবে একের মাধ্যমে বাড়ানো যায়:

create table foobar(
  id             INT PRIMARY KEY AUTO_INCREMENT,
  moobar         VARCHAR(500)
); 
ALTER TABLE foobar AUTO_INCREMENT=10;

INSERT INTO foobar(moobar) values ("abc");
INSERT INTO foobar(moobar) values ("def");
INSERT INTO foobar(moobar) values ("xyz");

select * from foobar;

'10', 'abc'
'11', 'def'
'12', 'xyz'

এই অটো 10 থেকে শুরু করে আইডি কলামটিকে বাড়ায়।

মাইএসকিউএল-এ অটো বর্ধন, 10 থেকে শুরু করে:

drop table foobar
create table foobar(
  id             INT PRIMARY KEY AUTO_INCREMENT,
  moobar         VARCHAR(500)
); 
SET @@auto_increment_increment=5;
ALTER TABLE foobar AUTO_INCREMENT=10;

INSERT INTO foobar(moobar) values ("abc");
INSERT INTO foobar(moobar) values ("def");
INSERT INTO foobar(moobar) values ("xyz");

select * from foobar;
'11', 'abc'
'16', 'def'
'21', 'xyz'

এই অটো 10 বার থেকে আইডি কলামটি 5 বার বাড়িয়েছে।


5

টেবিলের স্বয়ংক্রিয় স্থিরকরণের পদ্ধতি AUTO_INCREMENT

DROP PROCEDURE IF EXISTS update_auto_increment;
DELIMITER //
CREATE PROCEDURE update_auto_increment (_table VARCHAR(64))
BEGIN
    DECLARE _max_stmt VARCHAR(1024);
    DECLARE _stmt VARCHAR(1024);    
    SET @inc := 0;

    SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(`id`), 0) + 1 INTO @inc FROM ', _table);
    PREPARE _max_stmt FROM @MAX_SQL;
    EXECUTE _max_stmt;
    DEALLOCATE PREPARE _max_stmt;

    SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT =  ', @inc);
    PREPARE _stmt FROM @SQL;
    EXECUTE _stmt;
    DEALLOCATE PREPARE _stmt;
END//
DELIMITER ;

CALL update_auto_increment('your_table_name')

3

পরিবর্তনশীল ক্ষেত্রের নামগুলির পরিবর্তে আপনার যদি এই পদ্ধতিটির প্রয়োজন হয় তবে idএটি সহায়ক হতে পারে:

DROP PROCEDURE IF EXISTS update_auto_increment;
DELIMITER //
CREATE PROCEDURE update_auto_increment (_table VARCHAR(128), _fieldname VARCHAR(128))
BEGIN
    DECLARE _max_stmt VARCHAR(1024);
    DECLARE _stmt VARCHAR(1024);    
    SET @inc := 0;

    SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(',_fieldname,'), 0) + 1 INTO @inc FROM ', _table);
    PREPARE _max_stmt FROM @MAX_SQL;
    EXECUTE _max_stmt;
    DEALLOCATE PREPARE _max_stmt;

    SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT =  ', @inc);
    PREPARE _stmt FROM @SQL;
    EXECUTE _stmt;
    DEALLOCATE PREPARE _stmt;
END //
DELIMITER ;

CALL update_auto_increment('your_table_name', 'autoincrement_fieldname');

2

আপনি phpmyadmin ব্যবহার করে এটি করতে পারেন। কর্মে যাওয়ার চেয়ে সারণীটি নির্বাচন করুন। এবং টেবিল বিকল্পগুলির নীচে স্বতঃবৃদ্ধি পরিবর্তন করুন। শুরুতে ক্লিক করতে ভুলবেন না Phpmyadmin এ স্বয়ংক্রিয় বৃদ্ধি


-2

কেবলমাত্র ডেটা সহ টেবিলটি রফতানি করুন .. তারপরে এর স্কেলটি অনুলিপি করুন

CREATE TABLE IF NOT EXISTS `employees` (
  `emp_badgenumber` int(20) NOT NULL AUTO_INCREMENT,
  `emp_fullname` varchar(100) NOT NULL,
  `emp_father_name` varchar(30) NOT NULL,
  `emp_mobile` varchar(20) DEFAULT NULL,
  `emp_cnic` varchar(20) DEFAULT NULL,
  `emp_gender` varchar(10) NOT NULL,
  `emp_is_deleted` tinyint(4) DEFAULT '0',
  `emp_registration_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `emp_overtime_allowed` tinyint(4) DEFAULT '1',
  PRIMARY KEY (`emp_badgenumber`),
  UNIQUE KEY `bagdenumber` (`emp_badgenumber`),
  KEY `emp_badgenumber` (`emp_badgenumber`),
  KEY `emp_badgenumber_2` (`emp_badgenumber`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=111121326 ;

এখন অটো ইনক্রিমেন্ট মান পরিবর্তন করুন এবং এসকিউএল সম্পাদন করুন।

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