অটো-ইনক্রিমেন্ট কাউন্টারটি কেবলমাত্র মেমরিতে সঞ্চয় করা হয়, ডিস্কে নয়।
http://dev.mysql.com/doc/refman/4.1/en/innodb-auto-increment-handling.html
এই কারণে যখন পরিষেবা (বা সার্ভার) নিম্নলিখিতটি ঘটবে তখন:
সার্ভার শুরুর পরে কোনও টেবিল টিতে প্রথম sertোকানোর জন্য, ইনোডিবি এই বিবৃতিটির সমতুল্য সম্পাদন করে: আপডেটের জন্য ম্যাক্স (ii_col) থেকে নির্বাচন করুন;
ইনোডিবি একসাথে ইনক্রিমেন্ট বৃদ্ধি করে বিবৃতিটি পুনরুদ্ধার করে এবং কলামে এবং টেবিলের জন্য স্বতঃবৃদ্ধি কাউন্টারে বরাদ্দ করে। টেবিলটি খালি থাকলে InnoDB মান 1 ব্যবহার করে।
সুতরাং সরল ইংরেজিতে, মাইএসকিউএল পরিষেবা শুরু হওয়ার পরে আপনার টেবিলের স্বতঃবৃদ্ধি মান কী হবে তা কোনও ধারণা নেই। সুতরাং আপনি যখন প্রথম সারি সন্নিবেশ করান তখন এটি ক্ষেত্রের সর্বাধিক মান সন্ধান করে যা স্বতঃবৃদ্ধি ব্যবহার করে, এই মানটিতে 1 যোগ করে এবং ফলস্বরূপ মানটি ব্যবহার করে। যদি কোনও সারি না থাকে তবে এটি শুরু হবে 1 থেকে।
এটি আমাদের জন্য একটি সমস্যা ছিল, কারণ আমরা একাধিক-থ্রেড পরিবেশে আইডিগুলি ঝরঝরেভাবে পরিচালনা করতে টেবিল এবং মাইএসকিএল-এর অটো-ইনক্রিমেন্ট বৈশিষ্ট্যটি ব্যবহার করছি যেখানে ব্যবহারকারীরা তৃতীয় পক্ষের অর্থ প্রদানের সাইটটিতে পুনঃনির্দেশিত হচ্ছিলেন। সুতরাং আমাদের তা নিশ্চিত করতে হয়েছিল যে তৃতীয় পক্ষটি আমাদের কাছে ফিরে পেয়েছিল এবং যে আইডিটি আমাদের কাছে ফেরত পাঠানো হয়েছিল তা অনন্য ছিল এবং সেভাবেই চলবে (এবং অবশ্যই তাদের পুনঃনির্দেশের পরে ব্যবহারকারী লেনদেনটি বাতিল করে দেওয়ার সম্ভাবনা রয়েছে)।
সুতরাং আমরা একটি সারি তৈরি করছিলাম, উত্পন্ন স্বয়ংক্রিয়-বৃদ্ধি মান অর্জন করছিলাম, সারণিটি পরিষ্কার রাখতে সারিটি মোছা এবং মানটি অর্থপ্রদানের সাইটে ফরোয়ার্ড করছিলাম। InnoDB এআই মানগুলি যেভাবে পরিচালনা করে তা ইস্যুটি ঠিক করতে আমরা কী শেষ করেছি:
$query = "INSERT INTO transactions_counter () VALUES ();";
mysql_query($query);
$transactionId = mysql_insert_id();
$previousId = $transactionId - 1;
$query = "DELETE FROM transactions_counter WHERE transactionId='$previousId';";
mysql_query($query);
এটি সর্বদা সর্বশেষতম লেনদেনকে সারণীতে একটি সারি হিসাবে উত্পন্ন করে রাখে, অকারণে টেবিলটি ফুটিয়ে তোলে।
আশা করি এটি যে কারওর পক্ষে এটিকে চালিত করতে সহায়তা করে।
সম্পাদনা (2018-04-18) :
চার্চের নীচে উল্লিখিত হিসাবে এটি প্রদর্শিত হয় এর আচরণটি মাইএসকিউএল 8.0+ এ পরিবর্তন করা হয়েছে।
https://dev.mysql.com/worklog/task/?id=6204
সেই ওয়ার্কলগে শব্দটি সর্বোপরি ত্রুটিযুক্ত, তবে নতুন সংস্করণগুলিতে এটি InnoDB-এ প্রদর্শিত হবে যা এখন রিবুটগুলি জুড়ে অবিচ্ছিন্ন স্বয়ম্ভর মানগুলিকে সমর্থন করে।
-Gremio