Hintergrund Ich habe mit meinen Klassenkameraden über ein Randproblem der Zeilen-ID gesprochen und werde es hier ausführlich erklären. Wenn die InnoDB-Tabelle keinen Primärschlüssel definiert, wird eine systemweit standardmäßig inkrementelle Zeilen-ID (dict_sys->row_id) als Primärschlüssel verwendet. Addieren Sie bei jeder eingefügten Zeile 1 und wiederholen Sie den Vorgang, bis der Maximalwert erreicht ist. Es ist zu beachten, dass dict_sys->row_id zwar als unsigned long long definiert ist, der Maximalwert jedoch 2^48 beträgt, da dieser Primärschlüsselwert nur 6 Bytes groß ist. Wenn die row_id diesen Wert überschreitet, wird sie zwar immer noch erhöht, beim Schreiben werden jedoch nur die unteren Bits berücksichtigt, was als Modulo-Operation betrachtet werden kann. Frage Dies bringt ein Problem mit sich. Wenn in einem MySQL mit langer Laufzeit häufig Zeilen eingefügt und gelöscht werden (z. B. Protokolltabellen), kann es auch dann zu einer Wiederverwendung von row_id-Werten kommen, wenn die endgültige Tabellengröße nicht sehr groß ist. Und wir wissen, dass er als Primärschlüsselwert nicht wiederholt werden kann. Nehmen wir an, das passiert. In einer Tabelle steht die Zeilen-ID einer neu eingefügten Zeile im Konflikt mit der Zeilen-ID einer älteren Zeile. Was wird passieren? verifizieren Eigentlich ist hier nur eine Schlussfolgerung erforderlich. Der Zweck dieses Artikels besteht darin, eine Verifizierungsmethode mit Ihnen zu besprechen. Mit den oben genannten Informationen können wir die Gestaltung der folgenden Reproduktionsschritte in Betracht ziehen: 1) Erstellen Sie eine leere Tabelle ohne Primärschlüssel 2) gdb setzt dict_sys->row_id auf 1 3) Einfügen mehrerer Zeilen in eine leere Tabelle 4) gdb setzt dict_sys->row_id auf 2^48 5) Fügen Sie mehrere weitere Zeilen ein 6) Ergebnisse ansehen abschließend Wie Sie sehen, werden die Zeilen (1) und (2) überschrieben. Eine sinnvollere Lösung wäre, einen Fehler aufgrund eines doppelten Schlüssels zu melden, genau wie beim automatisch inkrementierten Primärschlüssel in der MySQL-Tabelle. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Detaillierte grafische Erklärung zum Löschen des Keep-Alive-Cache
>>: So leeren Sie den Cache nach der Verwendung von Keep-Alive in Vue
Inhaltsverzeichnis Vorsichtsmaßnahmen Notwendige ...
Shopify Plus ist die Enterprise-Version der von u...
1. Schreiben Sie zuerst eine Mysql-Link-Einstellu...
Mit REGELN kann die Art der inneren Rahmen der Ta...
1. Hörer ansehen Vorstellung der Uhr importiere {...
Da li ein Element auf Blockebene ist und standard...
„explain“ wird verwendet, um Informationen zum Ab...
Ob MySQL bei der Ausführung von Vorgängen wie Ein...
Es gibt zwei Möglichkeiten, Container-Ports in Do...
Windows 10 1903 ist die neueste Version des Windo...
Inhaltsverzeichnis 1. Filtern Sie eindeutige Wert...
Grafisches Installationstutorial für die MySQL In...
Vorgestern stieß ich in der Produktionsumgebung a...
Better-Scroll-Bildlaufprinzip Als übergeordneter ...
Inhaltsverzeichnis 1. fill()-Syntax 2. Verwendung...