Semua tahun MySQL ini telah menjadi sia-sia. . . Adakah anda tahu bahawa BUG ID auto-kenaikan MySQL innodb mempengaruhi 99% sistem sedia ada. . .
Mula-mula, mari kita hasilkan semula masalah ajaib ini:
Buat jadual ujian dengan ID kenaikan automatik, kemudian Sisipkan 3 kepingan data dan padam yang mempunyai id = 3.
DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; insert into test values (); select LAST_INSERT_ID(); insert into test values (); select LAST_INSERT_ID(); insert into test values (); select LAST_INSERT_ID(); delete from test where id = 3;
Kemudian, mari mulakan semula perkhidmatan MySQL
.
Masukkan rekod sekali lagi dan lihat ID yang terakhir dimasukkan. . .
insert into test values (); select LAST_INSERT_ID(); select * from test;
Hasilnya ialah selepas memulakan semula dan memasukkan rekod sekali lagi, ID masih 3! ! !
ID autokenaikan innodb asal akan ditetapkan secara automatik kepada ID maksimum 1 dalam rekod selepas perkhidmatan dimulakan semula.
Masalah ini boleh dihasilkan semula 100% daripada masa dalam sistem yang dipadamkan secara fizikal.
Anggapkan bahawa ID kenaikan automatik jadual tertentu juga akan dikaitkan dengan rekod lain.
Dalam kes yang melampau, rekod dengan ID terbesar dipadamkan sebelum memulakan semula perkhidmatan Selepas perkhidmatan dipulihkan, rekod dimasukkan dan kemudian dikaitkan. . .
Saya tidak dapat membayangkan masalah huru-hara data!
Nasib baik, masalah ini telah dibetulkan dalam MySQL 8.0!
Jika anda pengguna MySQL 5.7 atau versi yang lebih lama, jangan risau, pelbagai penyelesaian adalah seperti berikut:
* Tukar semua pemadaman fizikal dalam sistem kepada pemadaman lembut. Secara amnya, rangka kerja mempunyai fungsi ini terbina dalam, dan sangat mudah untuk mengubah suai dan membina semula.
* Dayakan tetapan innodb_autoinc_persistent, terdapat kehilangan prestasi sebanyak 1%, yang boleh diabaikan.
innodb_autoinc_persistent=on innodb_autoinc_persistent_interval=1
Pembelajaran yang disyorkan: "Tutorial Video MySQL"
Atas ialah kandungan terperinci Adakah anda tahu kesan BUG ID peningkatan diri MySQL innodb?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!