Heim > Datenbank > MySQL-Tutorial > MySQL-Fehler 1062: Wie kann man doppelte Primärschlüsseleinträge ohne Datenverlust beheben?

MySQL-Fehler 1062: Wie kann man doppelte Primärschlüsseleinträge ohne Datenverlust beheben?

Susan Sarandon
Freigeben: 2025-01-03 21:51:40
Original
728 Leute haben es durchsucht

MySQL Error 1062: How to Fix Duplicate Primary Key Entries Without Data Loss?

MySQL 1062-Fehler: Doppelter Eintrag für PRIMÄRSCHLÜSSEL, wie kann man ihn beheben, ohne Daten zu verlieren?

Problem:

Wann Beim Versuch, den Primärschlüssel einer MySQL-Tabelle mit vorhandenen Daten und Beziehungen zu ändern, tritt ein Fehler auf aufgetreten:

1062 - Duplicate entry '0' for key 'PRIMARY'
Nach dem Login kopieren

Das Problem entsteht, weil eine neu hinzugefügte Spalte, die als Primärschlüssel gedacht ist, doppelte Werte (0) enthält, was gegen die Eindeutigkeitsbeschränkung verstößt.

Ursache:

Dieser Fehler tritt normalerweise auf, wenn Sie über vorhandene Daten mit Fremdschlüsselbeziehungen verfügen, die auf die Spalte verweisen, die als Primärschlüssel geändert wird. Wenn die Werte im Primärschlüssel nicht eindeutig sind, lehnt die Datenbank die Änderung ab.

Lösung (ohne Datenverlust):

So beheben Sie dieses Problem ohne Datenverlust , können Sie diesen Schritten folgen:

  1. Primärschlüssel festlegen als Automatische Inkrementierung:

    Geben Sie in der Tabellendefinition die neue Primärschlüsselspalte als automatische Inkrementierung an:

    `momento_id` INT(11) NOT NULL AUTO_INCREMENT,
    Nach dem Login kopieren

    Dadurch werden automatisch eindeutige Werte für den neuen Primärschlüssel generiert.

  2. Alten Primärschlüssel löschen:

    Entfernen Sie den Vorhandene Primärschlüsseleinschränkung:

    ALTER TABLE `momento_distribution` DROP PRIMARY KEY;
    Nach dem Login kopieren
  3. Neuen Primärschlüssel hinzufügen:

    Eine neue Primärschlüsseleinschränkung für die Spalte „Auto-Inkrementierung“ hinzufügen:

    ALTER TABLE `momento_distribution` ADD PRIMARY KEY (`momento_id`);
    Nach dem Login kopieren

Dadurch werden die automatisch generierten Werte als eindeutige Primärschlüssel zugewiesen, ohne dass sich dies auf die vorhandenen auswirkt Daten.

Alternativer Ansatz:

Wenn die Spalte „momento_id“ nicht bei 0 beginnen muss, können Sie einen alternativen Ansatz in Betracht ziehen:

  1. Erstellen Sie ein neues Auto-Inkrement Spalte:

    Neue Spalte mit aktivierter automatischer Inkrementierung hinzufügen:

    ALTER TABLE `momento_distribution` ADD `new_id` INT(11) NOT NULL AUTO_INCREMENT;
    Nach dem Login kopieren
  2. Vorhandene Daten aktualisieren:

    Aktualisieren Sie die vorhandenen Zeilen, um die neuen zu füllen Spalte:

    UPDATE `momento_distribution` SET `new_id` = `momento_id`;
    Nach dem Login kopieren
  3. Alten Primärschlüssel löschen und neuen Primärschlüssel hinzufügen:

    Alten Primärschlüssel löschen und neuen Primärschlüssel hinzufügen in der Spalte „Automatische Inkrementierung“:

    ALTER TABLE `momento_distribution`
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (`new_id`);
    Nach dem Login kopieren

Dieser Ansatz weist allen eindeutige Werte für die automatische Inkrementierung zu Zeilen, um sicherzustellen, dass die Primärschlüsseleinschränkung erfüllt ist.

Das obige ist der detaillierte Inhalt vonMySQL-Fehler 1062: Wie kann man doppelte Primärschlüsseleinträge ohne Datenverlust beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage