Penghitung kenaikan otomatis disimpan hanya di memori utama, bukan pada disk.
http://dev.mysql.com/doc/refman/4.1/en/innodb-auto-increment-handling.html
Karena hal ini ketika layanan (atau server) restart maka hal berikut akan terjadi:
Setelah server dinyalakan, untuk penyisipan pertama ke tabel t, InnoDB mengeksekusi yang setara dengan pernyataan ini: SELECT MAX (ai_col) DARI t UNTUK PEMBARUAN;
InnoDB menambah satu nilai yang diambil oleh pernyataan dan menugaskannya ke kolom dan ke penghitung kenaikan otomatis untuk tabel. Jika tabel kosong, InnoDB menggunakan nilai 1.
Jadi, dalam bahasa Inggris yang sederhana, setelah layanan MySQL dimulai, tidak tahu berapa nilai kenaikan otomatis untuk tabel Anda. Jadi ketika Anda pertama kali menyisipkan baris, ia menemukan nilai maksimum bidang yang menggunakan kenaikan otomatis, menambahkan 1 ke nilai ini, dan menggunakan nilai yang dihasilkan. Jika tidak ada baris, itu akan mulai dari 1.
Ini merupakan masalah bagi kami, karena kami menggunakan tabel dan fitur penambahan otomatis mysql untuk mengelola ID dengan rapi di lingkungan multi-utas tempat pengguna diarahkan kembali ke situs pembayaran pihak ketiga. Jadi kami harus memastikan ID pihak ketiga yang didapat dan dikirim kembali kepada kami adalah unik dan akan tetap seperti itu (dan tentu saja ada kemungkinan pengguna akan membatalkan transaksi setelah mereka dialihkan).
Jadi kami membuat baris, memperoleh nilai kenaikan-otomatis yang dihasilkan, menghapus baris agar tabel tetap bersih, dan meneruskan nilai ke situs pembayaran. Apa yang akhirnya kami lakukan untuk memperbaiki masalah cara InnoDB menangani nilai-nilai AI adalah sebagai berikut:
$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);
Ini selalu membuat transactionId terbaru dihasilkan sebagai baris dalam tabel, tanpa perlu meledakkan tabel.
Semoga itu bisa membantu orang lain yang mungkin mengalami ini.
Edit (2018-04-18) :
Seperti yang disebutkan Finesse di bawah ini, kelihatannya perilaku ini telah dimodifikasi di MySQL 8.0+.
https://dev.mysql.com/worklog/task/?id=6204
Kata-kata dalam worklog itu paling buruk, namun tampaknya InnoDB di versi yang lebih baru sekarang mendukung nilai autoinc yang persisten di seluruh reboot.
-Gremio