Heim > Datenbank > MySQL-Tutorial > Kennen Sie die Auswirkungen des MySQL-innodb-Selbstinkrementierungs-ID-Fehlers?

Kennen Sie die Auswirkungen des MySQL-innodb-Selbstinkrementierungs-ID-Fehlers?

藏色散人
Freigeben: 2022-10-18 16:46:37
nach vorne
2085 Leute haben es durchsucht

All die Jahre mit MySQL waren umsonst. . . Wussten Sie, dass der Fehler bei der automatischen Inkrementierung der MySQL-Innodb-ID 99 % der vorhandenen Systeme betrifft? . .

Kennen Sie die Auswirkungen des MySQL-innodb-Selbstinkrementierungs-ID-Fehlers?

Zuerst reproduzieren wir dieses magische Problem:

Erstellen Sie eine Testtabelle mit einer automatisch inkrementierenden ID, fügen Sie dann 3 Datenelemente ein und löschen Sie das mit der 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;
Nach dem Login kopieren

Dann starten wir den MySQL Dienst neu.

Fügen Sie erneut einen Datensatz ein und werfen Sie einen Blick auf die zuletzt eingefügte ID. . .

insert into test values ();
select LAST_INSERT_ID();
select * from test;
Nach dem Login kopieren

Das Ergebnis ist, dass nach einem Neustart und erneutem Einfügen des Datensatzes die ID immer noch 3 ist! ! !

Die ursprüngliche Innodb-Auto-Inkrement-ID wird nach dem Neustart des Dienstes automatisch auf die maximale ID + 1 im Datensatz gesetzt.

Dieses Problem kann in einem System, das physisch gelöscht wurde, zu 100 % reproduziert werden.

Gehen Sie davon aus, dass die Auto-Inkrement-ID einer bestimmten Tabelle auch mit anderen Datensätzen verknüpft wird.

In extremen Fällen wird der Datensatz mit der größten ID vor dem Neustart des Dienstes gelöscht. Nach der Wiederherstellung des Dienstes wird der Datensatz eingefügt und dann verknüpft. . .

Das Problem des Datenchaos ist unvorstellbar!

Glücklicherweise wurde dieses Problem in MySQL 8.0 behoben!

Wenn Sie MySQL 5.7 oder eine ältere Version verwenden, machen Sie sich keine Sorgen, die verschiedenen Lösungen sind wie folgt:

* Ändern Sie alle physischen Löschungen im System in weiche Löschungen. Im Allgemeinen ist diese Funktion im Framework integriert und lässt sich sehr bequem ändern und rekonstruieren.

* Aktivieren Sie die Einstellung innodb_autoinc_persistent. Es entsteht ein Leistungsverlust von 1 %, der ignoriert werden kann.

innodb_autoinc_persistent=on
innodb_autoinc_persistent_interval=1
Nach dem Login kopieren

Empfohlenes Lernen: „MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonKennen Sie die Auswirkungen des MySQL-innodb-Selbstinkrementierungs-ID-Fehlers?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yurunsoft.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage