Beim Aktualisieren der automatisch inkrementierten Primärschlüssel-ID in MySQL sind Probleme aufgetreten

Beim Aktualisieren der automatisch inkrementierten Primärschlüssel-ID in MySQL sind Probleme aufgetreten

Dies ist ein Problem, das mir bekannt ist, aber ich wäre fast in die Falle getappt (ich hätte es fast vergessen, aber zum Glück fiel es mir ein, als ich die Online-Punkte sortierte, bevor ich online ging), deshalb habe ich es hier speziell aufgezeichnet

Warum die Auto-Inkrement-ID aktualisieren?

Ich musste aufgrund historischer Geschäftsprobleme eine Reihe von IDs aktualisieren und um Konflikte zu vermeiden, musste ich die IDs für die Aktualisierung mehrmals erweitern. Da die Datenmenge in meiner Tabelle nicht groß ist, handelt es sich um eine Situation mit vielen Lese- und wenigen Schreibvorgängen, also habe ich sie einfach um 1000 erweitert.

Frage

Wenn wir in MySQL den Autoinkrement-Primärschlüssel auf einen größeren Wert aktualisieren (z. B. der Maximalwert der Autoinkrement-ID ist 1000 und Sie aktualisieren den Datensatz mit ID = 49 auf ID = 1049), ändert MySQL den Autoinkrement-Wert der Tabelle nicht auf den aktualisierten Wert. In einigen Fällen, z. B. nach DDL, Neustart usw., beginnt das Unternehmen, Fehler zu melden. Wenn Sie zu diesem Zeitpunkt den aktuellen Vorgang nicht kennen, denken Sie möglicherweise fälschlicherweise, dass es sich um ein Problem mit dem aktuellen Geschäftsvorgang handelt. Tatsächlich liegt es an der durch die Aktualisierungs-ID vergrabenen Grube (Primärschlüsselkonflikt).
Wie unten dargestellt:

Abbildung 1: Originaldaten vor dem Update

Rohdaten

Update-Anweisung ausführen

Testsatz-ID aktualisieren = 10, wobei ID = 2;

Abbildung 2: Aktualisierte Daten

Aktualisierte Daten

Führen Sie eine neue Insert-Anweisung aus

Test(name)werte einfügen ('dddd')

Abbildung 3: Neue Daten eingefügt

Nach dem Einfügen neuer Daten

Ich glaube, jeder hat das Problem zu diesem Zeitpunkt gesehen. Zu Beginn nach dem Update gibt es möglicherweise kein Problem, aber wenn die selbstinkrementierende ID den von Ihnen aktualisierten Maximalwert erreicht, ist ein ID-Konflikt unvermeidlich. . .

Wie man es löst

1. Wenn es sich um eine persönliche Testbibliothek handelt, ist dies nicht wichtig. Sie können die Datenbank neu starten
2. Natürlich kann die Online-Datenbank nicht auf diese Weise eingerichtet werden, es sei denn, Sie sind sehr eigensinnig (und Sie benötigen einen DBA, der Sie dabei unterstützt). Zu diesem Zeitpunkt können Sie versuchen, eine ID anzugeben, um ein Datenelement einzufügen, das im Geschäft bedeutungslos ist, z. B. weich gelöschte Daten. (Meine Fallliste hat keine weiche Löschmarkierung, Sie können das verstehen.)

Testwerte (ID, Name) einfügen (20, 'eeee');

Nach dem Betrieb, wie in der Abbildung dargestellt:

Einfügen durch Angabe der ID

Führen Sie die folgende SQL-Anweisung aus und vergleichen Sie die Ergebnisse

Testwerte (Name) einfügen ('ffff');

Vergleichsergebnisse

An diesem Punkt hat die Auto-Inkrement-ID begonnen, vom Maximalwert aus anzusteigen.

Nachdem ich nach Informationen gesucht hatte, stellte ich fest, dass dieser Fehler bereits 2005 auftrat, jedoch aufgrund der Leistung und einiger Szenarien nicht behoben wurde. In MySQL 8.0.11 tritt dieses Problem normal auf.

Dies ist das Ende dieses Artikels über die Probleme, die beim Aktualisieren der automatisch inkrementierten Primärschlüssel-ID durch MySQL auftreten. Weitere relevante Inhalte zum Aktualisieren der automatisch inkrementierten Primärschlüssel-ID durch MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So generieren Sie die MySQL-Primärschlüssel-ID (selbstinktive, eindeutige und unregelmäßige)
  • Die automatische Inkrementierung der Primärschlüssel-ID von MySQL wird auf diese Weise nicht verarbeitet

<<:  HTML-Tabelle_Powernode Java Academy

>>:  CSS Transition erweitert und reduziert Elemente durch Ändern der Höhe

Artikel empfehlen

Grundlegendes Nutzungs-Tutorial zur IPTABLES-Firewall unter LINUX

Vorwort Für Produktions-VPS mit öffentlicher IP w...

Detaillierte Erklärung zur Verwendung von HTML-Einbettungs-Tags und -Attributen

1. Grundlegende Grammatik Code kopieren Der Code ...

Was ist JavaScript Anti-Shake und Throttling

Inhaltsverzeichnis 1. Funktion Entprellung 1. Was...

Übersicht über MySQL-Statistiken

MySQL führt SQL durch den Prozess der SQL-Analyse...

So implementieren Sie mehrere Parameter in el-dropdown in ElementUI

Aufgrund der zunehmenden Anzahl von Schaltflächen...

Detaillierte Erklärung zur Verwendung von MySQL mysqldump

1. Einführung in mysqldump mysqldump ist ein logi...

Vue implementiert die Shake-Funktion (kompatibel mit ios13.3 und höher)

Vor Kurzem habe ich mit shake.js eine ähnliche Fu...

WHMCS V7.4.2 Grafisches Installationstutorial

1. Einleitung WHMCS bietet eine Komplettlösung fü...