Heim > Datenbank > MySQL-Tutorial > Warum erhalte ich den MySQL-Fehler 1062: Doppelter Eintrag für einen neuen Primärschlüssel?

Warum erhalte ich den MySQL-Fehler 1062: Doppelter Eintrag für einen neuen Primärschlüssel?

Linda Hamilton
Freigeben: 2024-12-27 13:53:09
Original
188 Leute haben es durchsucht

Why Am I Getting MySQL Error 1062: Duplicate Entry for a New Primary Key?

MySQL-Fehler 1062: Doppelter Eintrag für neuen Primärschlüssel

Beim Ändern einer MySQL-Tabelle, um ihren Primärschlüssel zu ändern, kann der Fehlercode 1062 auftreten: „Doppelter Eintrag.“ „0“ für Schlüssel „PRIMÄR“. Dies tritt auf, wenn die neu festgelegte Primärschlüsselspalte Duplikate enthält Werte.

Ursache:

Das Problem tritt auf, weil die vorhandenen Tabellendaten möglicherweise doppelte Werte in der Spalte enthalten, die in den Primärschlüssel konvertiert wird. Die PRIMARY KEY-Einschränkung stellt sicher, dass alle Werte in der Spalte eindeutig sind. Beim Hinzufügen der PRIMARY KEY-Einschränkung prüft MySQL auf Duplikate und schlägt fehl, wenn diese vorhanden sind.

Lösung:

Um Datenverlust zu vermeiden und den Fehler zu beheben, führen Sie die folgenden Schritte aus:

1. Automatische Inkrementierung zur neuen Primärschlüsselspalte hinzufügen:

Stellen Sie sicher, dass die neue Primärschlüsselspalte die AUTO_INCREMENT-Eigenschaft hat:

CREATE TABLE `momento_distribution`
(
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `momento_id` INT(11) NOT NULL,
    `momento_idmember` INT(11) NOT NULL,
    `created_at` DATETIME DEFAULT NULL,
    `updated_at` DATETIME DEFAULT NULL,
    `unread` TINYINT(1) DEFAULT '1',
    `accepted` VARCHAR(10) NOT NULL DEFAULT 'pending',
    `ext_member` VARCHAR(255) DEFAULT NULL,
    PRIMARY KEY (`id`, `momento_idmember`),
    KEY `momento_distribution_FI_2` (`momento_idmember`),
    KEY `accepted` (`accepted`, `ext_member`)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;
Nach dem Login kopieren

Durch Zuweisen der AUTO_INCREMENT-Eigenschaft führt MySQL automatisch eine Generierung durch eindeutige Werte für die neue Primärschlüsselspalte, um potenzielle Duplikate zu vermeiden.

2. Ändern Sie die vorhandene Spalte:

Wenn Sie die neue Primärschlüsselspalte bereits ohne die Eigenschaft AUTO_INCREMENT erstellt haben, können Sie sie mit der folgenden Abfrage ändern:

ALTER TABLE `momento_distribution`
CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`id`);
Nach dem Login kopieren

Diese Abfrage wird Ändern Sie die vorhandene ID-Spalte so, dass sie über die Eigenschaft AUTO_INCREMENT verfügt, löschen Sie die alte Primärschlüsseleinschränkung und fügen Sie eine neue Primärschlüsseleinschränkung für die geänderte ID-Spalte hinzu.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich den MySQL-Fehler 1062: Doppelter Eintrag für einen neuen Primärschlüssel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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