Rumah > pangkalan data > tutorial mysql > Adakah anda tahu kesan BUG ID peningkatan diri MySQL innodb?

Adakah anda tahu kesan BUG ID peningkatan diri MySQL innodb?

藏色散人
Lepaskan: 2022-10-18 16:46:37
ke hadapan
2087 orang telah melayarinya

Semua tahun MySQL ini telah menjadi sia-sia. . . Adakah anda tahu bahawa BUG ID auto-kenaikan MySQL innodb mempengaruhi 99% sistem sedia ada. . .

Adakah anda tahu kesan BUG ID peningkatan diri MySQL innodb?

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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
Salin selepas log masuk

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!

Label berkaitan:
sumber:yurunsoft.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan